Archive for the ‘Java’ Category
The IT sector is flourishing. If you’ve used a computer for at least a couple of times in the last few years, you’ve probably noticed this. I’ve noticed it myself even more after a business trip to Stockholm where I was lucky to attend some conferences and learnt more about Swedish IT industry tendencies. These tendencies reflect our life in general. Life changes rapidly with new technologies bursting into it. And when it comes to programming languages, we get a chance to see very different trendy styles. Programming languages which were popular some years ago are not useful today. And no one can exactly predict which programming language will be popular in future. That’s why a programmer who wants to stay in developer fields has to adopt the right programming language from time to time.
As the Swedish software maker Erik Starck pointed out, “programming is about managing complexities”. And it’s really so. An understanding of at least one programming language makes an impressive addition to any CV nowadays.
It is also very difficult to get the exact number of users for any programming language. Many of us use multiple programming languages. The more experience you have, the more programming languages you use. The more programs you write or work with, the chances of using more languages rise. The larger the company, the more languages you’re likely to use.
There are a number of ways to measure the popularity of a programming language, for example, based on the number of: 1) new applications written in the language; 2) existing applications written in the language; 3) developers that use the language primarily; 4) developers that use the language ever; 5) web searches; 6) available jobs that require skills in the language; 7) developers’ favorites, etc.
My survey attempts to rank which programming languages are most popular in Sweden, each using a different measure. So, they are the following:
Python is an object-oriented programming language which allows developers to work quickly while integrating their systems more efficiently and effectively. Designed by Guido van Rossum in 1991, Python is one of the most easy to use programming languages.
Python is characterized by its use of indentation for readability, and its encouragement for elegant code by making developers do similar things in similar ways.
Top Employers: Amazon, Dell, Google, eBay, Instagram, Yahoo
Java is a class-based, object-oriented programming language founded by Sun Microsystems in 1995. Java is one of the most in-demand programming languages today for many reasons. First of all, it is a well-organized language with a strong library of reusable software components. Secondly, programs written in Java can run on many different computer architectures and operating systems because of the use of the JVM (Java virtual machine).
Top Employers: Amazon, Deloitte, Sun, eBay, Symantec Corporation, Cisco Systems, Samsung
C++ is a compiled, multi-paradigm language written as an update to C in 1979 by Bjarne Stroustrup.
Due to its high-level compatibility and object-orientation, C++ is used for developing a wide-range of applications and games which makes it a popular and sought after programming language by the employers.
Top Employers: Intel, the Math Works, Microsoft, Qualcomm, Amazon, Mozilla, Adobe, Volvo
Ruby is an open source, dynamic programming language designed by Yukihiro Matsumoto in 1995 with a key focus on productivity and simplicity .It is one of the most object-oriented languages in the world.
Ruby is a mix of elegant syntax which is easy to read and write and hence it has attracted many organizations and developers.
Top Employers: Spokes, VMware, Accenture, Cap Gemini, Siemens, BBC, NASA
Top Employers: Microsoft, Sales Force, IBM, Yahoo, Dell
C# is a compiled, object-oriented language developed by Microsoft.
It is highly used on Windows platform and labelled as the premium language for Microsoft .NET framework. C# is known for strong typing, procedural and functional programming discipline which is the reason it has acquired so much popularity.
Top Employers: Microsoft, HP, Digi-Key Corporation, Allscripts, Intel
Those are the top 6 programming languages which are in great demand among Swedish developers.
And one more thing: remember that opinions are like noses, everyone has one and they all smell ;) If you disagree, please feel free to email me or write your own opinions in the comments.
- Ideal for complex “client-side” applications, where the complexity is more in a way “components” of an application interacts with each other than in a way they synchronise and/or interact with backend
- Very clear separation of concerns
- Uses concepts that kind of look like the future of HTML/DOM (DOM templates, binding attributes).
- A bit complicated to grasp. A lot of new concepts
- jQuery or another dom parsing framework in directives may be painful to use because of the way angular compiles templates
- Good for application with a big level of complexity on the client side, but you’ll have to learn a lot of new stuff.
On the whole, AngularJS is a robust and viable framework for building generic web apps. Whether it lives up to the expectations of being the most dominant JS framework for web development is yet to be seen.
Backbone came out in June 2010, and its community is nearly as large as Angular’s. Many popular applications such as Twitter, LinkedIn Mobile and Foursquare use Backbone framework. Also a number of music apps were built with Backbone, including well-known Pandora, Soundcloud and Pitchfork.
If you’re working on a single-page application or widget and you’re comfortable with being a self-starter—Backbone is likely the right choice for you.
- Very easy to start with
- Very small
- Free to use any templating engine
- A lot of excellent documentation
- Good Community Support
- Very popular (According to Github, Stackoverflow statistics)
- Very flexible in how you may want to use it
- Minimalist library
- Easy to learn
- No two way data-binding
- Dependency on different frameworks like jQuery and Underscore
- No provision for handling nested views
- More work required to build large scale applications as compared to Angular or Ember
- Code can become messy
- DOM manipulations are left to the developer
- Performs slower than AngularJS
Ember is the newest of the three, but it’s already making waves. LivingSocial, Groupon, Zendesk, Discourse and Square are some of the most well-known applications that have adopted Ember. Ember’s creators say it’s easy to see when a site is using Ember because of its loading speed.
Ember’s library size and support network are its two greatest strengths, but if you’re only trying to create a small widget or single-page app, it might be overkill for you. If you’re working on a multipage, navigational, long-term project, Ember might be the right choice for you.
- Good for long running and complex applications with deep nested view hierarchies
- Aggregates model data changes and update the DOM late in the RunLoop
- Well defined models and computed properties
- Use HandleBars as templating which is flexible
- Provides auto updating computed properties
- Test driven
- Relatively new framework
- Steepest learning curve out of the three
- Payload is the largest out of all three
- Dependency on jQuery and Handlebars
- Poor performance as compared to AngularJS
- Documentation is not very good
- Two way bindings are not implemented well
Today comparing software on a market is a difficult task. Each product comes from a market / technology niche with great specific features developed by passionate people and open source lovers. There is no doubt the most appropriate CMS will depend on what one is trying to use it for, but let us try to have sort of a general comparison and see what definitely should be on our Java CMS shortlist.
There are so many Open Source Java CMS but let me focus on some of them which are considered quite popular now and they are Hippo, Magnolia and Jahia.
Hippo contains an optimal combination of enterprise architecture capabilities, fast development possibilities and values of open integration. It enables you to gain the power to be open for integration with any technology that you require to manage, optimize and create high-impact customer experiences.
This CMS is really about managing content for multi-channel publication: web, mobile, social, print, etc. Separation of content from presentation is the cornerstone of the product.
Speaking of analytics systems like Webtrends, Omniture and Google Analytics Hippo CMS makes it possible for you easily embed tracking codes into content to feed analytics systems. You can also observe your content effectiveness, as Hippo exposes data collected by analytics systems in the CMS.
In terms of ecommerce, Hippo has been integrated with many custom eCommerce solutions. Take ATG, Konakart, Magento and IBM WebSphere Commerce as example. Due to the open interfaces of all Hippo components, it works whatever eCommerce system you chose.
Hippo format neutral way of managing content makes it a great source for publishing into portals. So, if your extranet or intranet runs in a portal environment, then it is not necessary to rebuild it with Hippo if you want to increase it with centrally managed content. Hippo plays nicely with all major portals and has been integrated with portals like Liferay, JBoss, SAP and Websphere Portal.
• flexible content structure & faceted navigation
• integration with some external applications
• portal alike functionalities/ integrations
• a lot of sub-sites with sharing content capabilities
Magnolia powers the websites of government as well as leading Fortune 500 enterprises in more than 100 countries on all continents of the world. It is a leading CMS favored for its ease of use and license. The page editing interface enables authors to lay out content exactly as it would appear to the Web site visitor.
Magnolia is similar to Hippo in lots of ways, except that it’s very much focused on managing smaller, “single” websites. Magnolia CMS is not a framework to build web applications, however can be used to manage data. You can for instance manage products and use them as content for web pages.
Authors no longer need to switch between different navigation mechanisms to make a small change, but they can instantly edit any page in their browser.
Magnolia’s inline-editing feature ensures that editors see content paragraphs in their right context at all times, reducing the switching between working modes.
Magnolia has been designed for heavy-load enterprise websites, having a low memory footprint, a smart cache, built-in clustering capabilities, a distributed deployment architecture that decouples authoring from publishing and the possibility to build load-balanced public servers to provide more throughput and availability.
• good for smaller sites (content related); although, Magnolia can be used on quite big sites as well
• need in page editing/inline editing (this is possible within Hippo CMS but Magnolia is bit easier to setup)
• you only have page(content) based site/navigation. Hippo solution is much more flexible in this regard.
Jahia delivers web content integration software by combining enterprise web content management with document and portal management features. Jahia is content centric depending on the type of project you envision, this is a major difference. The granularity of Jahia’s content model offers a deeper control on each content item. This provides greater benefit when it comes to repurposing, reusing content or controlling precisely how your content should behave (roles, workflow, layout, display options, etc.). Of course, these advantages need to be balanced with the specific objectives or your project. For a basic website scenario, this granularity is perhaps not necessary and Magnolia may be an easier choice. For intranet or portal scenarios, complex websites or content based applications, the Jahia model and its widely recognized flexibility may be more appropriate.
Jahia works great with structured content. For instance, Jahia offers options beyond the unique paragraph concept – more suited to create unstructured objects that must be displayed in a page, it offers a variety of additional objects with multiple properties you can manipulate, sort, validate, repurpose, etc. You can obviously decide to only use a simple, unstructured approach in Jahia but the ability to really declare, control and manipulate a wide range of additional object types is very powerful in more complex scenarios. Also important is that all Jahia editing UIs are auto-generated based on simple content definitions: not having to create your own input masks is a huge time saver and cuts development time.
Jahia embeds several frameworks that are very important if you plan to manipulate your content through API and code, and if you want your Jahia instance to interact with other apps / systems, some of the most important ones are) Jboss Drools, Apache Camel, jBPM.
Caching mechanisms in Jahia is based on long experience fine tuning performance for large and high traffic websites: there is a sophisticated and efficient caching solution that deals with both automatic invalidation and expiration. This allows avoiding dependencies and flushing management problems, which is key to complex, large and/or interactive sites scenarios.
• deep control on each content item due to granularity of Jahia’s content model
• good for working with structured content
• good for large and high traffic websites
The CMSs under review have their differences but also have something in common. It might be interesting to note that all three products actually use the same storage technology: Apache Jackrabbit, which is the reference implementation of the Java Content Repository API. This ensures some guarantee as to the possibility to migrate in/out the content relatively easily.
You are welcome to make Java CMS shortlist of your choice longer with other products as well as to share your comments and comparative analysis details on the given ones. It would be really great to learn more on this subject as well as get to know your experience.
Some people will argue that it’s not worthy comparing Tomcat and JBoss, because one of them is a superset of the other. In fact JBoss is bundled with a forked version of Tomcat. So JBoss is Tomcat plus:
* JMS messaging provider
* Web Services engine (JAX-WS and/or JAX-RS)
* Management capabilities like JMX and a scripted administration interface
* A powerful data grid solution (Infinispan)
* Advanced security, e.g. out-of-the-box integration with 3rd party directories
* A dynamic and powerful clustering engine
* Transaction management service
Still many decision makers have to choose between these two, so lets’ take a deeper look at them.
The JBoss AS is an application server based on Java. It is an open source server and is usable in any operating system supported by Java.
Apache Tomcat, or its more widely known name Tomcat, is a servlet container (meaning it is a Java class that operates under the strictures of the Java Servlet API – a protocol by which a Java class responds to an http request). This is an open source server, providing a ‘pure Java’ HTTP web server environment in which code written in Java is capable of running.
Tomcat is only a servlet engine and JBoss offers many more functionalities out of the box. Still JBoss is no longer a heavyweight monolithic container, but a modular application server featuring true classloading isolation, modules loaded on demand, domain management and exceptionally lightweight container. It has a pluggable architecture and if required, you can unplug features from JBoss to make it essentially a Tomcat servlet container.
At the same time the plus going in favour of Tomcat is that it is fairly lightweight, and it means less memory requirement and a faster response. At the same time if you need certain JEE features beyond the Servlet API, you can easily enhance Tomcat. For example, if you need JPA features you can include Hibernate or OpenEJB and JPA works nearly out of the box.
Tomcat is hassle free and might be the right choice when you are not using much of Java features. It is a very good fit if it comes to web centric, user facing applications.
In case backend integration comes into play, a JEE application server should be considered. Last but not least, migrating a WAR developed for Tomcat to JBoss should be a 1 day exercise.
Some people still argue that instead of using application servers, one can still deliver a full stack application using Tomcat + Spring adding the right frameworks and writing the Spring integration layer with these frameworks. That’s for sure true. Still the logical question is what price you will have to pay for that. The JBoss project can be focused around average – to junior developers. Mastering the same complex stack of technologies with Tomcat and Spring requires skilled and well paid developers.
To make it short, Tomcat is merely an HTTP server and Java servlet container. JBoss is a full-blown JEE application servers, including an EJB container and all the other features of that stack. On the other hand, Tomcat has a lighter memory footprint (~60-70 MB), while JBoss weigh in at hundreds of megs. Tomcat is very popular for simple web applications, or applications using frameworks such as Spring that do not require a full JEE server. Administration of a Tomcat server is arguably easier, as there are fewer moving parts.
However, for applications that do require a full JEE stack (or at least more pieces that could easily be bolted-on to Tomcat) JBoss is one of the most popular open source offerings. JBoss has a larger and deeper user community, and a more mature codebase.
So, we should not really care anymore about which is better, but focus on the application requirements. However, you can still use the best of these two worlds in your enterprise applications.
It would be great if your could share your opinions on this topic :) Thanks in advance for your comments!
Scala is a statically typed and multi-paradigm programming language that runs on Java virtual machine and provides Java like syntax with a few improvements.
Being a multi-paradigm programming language, Scala allows for mixing multiple programming styles such as object oriented, imperative and functional programming. Whether it’s good or not, it is not a question that could be answered with a yes or no. Supporters would say that programmers can choose from a variety of styles and stick to the best depending on their needs. The others would argue that putting together some features found in many other programming languages can’t work well, mostly by increasing complexity and making a programming language obscure.
Scala code compiles to a byte code and runs on Java virtual machine, thus it is compatible with other Java applications. If most of your code and libraries are from Java world, this can be nothing but a good thing. At the same time some additional complexity in Scala is dictated by assuring compatibility with Java.
For some developers the Scala code is obscure, for others could be a nice and neat form of solving some specific problems.
One more positive aspect of Scala is its conciseness. We all know how Java verbose is and how many boiler code developers write everyday including constructors, getters, variable initialisation (type and generics), semicolons and many others.
Now let’s see some other aspects of working with Scala:
At first sight the performance in Scala is very good, comparable to Java. Scala code compiles to the same byte code as Java does and runs on the same Java virtual machine. Still how fast Scala code is may vary from case to case and usually it’s up to the way how the code is written. The awareness of how to write a high performance Scala code is especially important for Java developers who are not very experienced in both Scala and functional programming.
There are not too many development tools created specifically to serve Scala, but fortunately, thanks to compatibility with Java it doesn’t look so bad. One family of tools hardly usable in Scala are those, which do some sort of code analysis, for instance code coverage and static code analysis. Static code analysis tools are even less usable.
The two worth to mention native Scala extensions are Lift web framework and Akka actors platform.
The majority of libraries and frameworks from a Java world, should be possible to use quite smoothly, which among other things, is thanks to implicit conversions in Scala.
Interoperability between Scala and other programming languages, including Java/C/C++, is very good, mostly because of running on Java virtual machine. What Java may talk to, Scala can do as well. Taking into account support for implicit conversions described above, I would state that Scala is one of the leaders of interoperability among all programming languages.
Developers are provided with all they need to test Scala applications efficiently. To follow a Test Driven Development methodology, they can use popular in Java world Junit tool. If someone is more keen on Behaviour Driven Development then ScalaTest is a way to go.
Monitoring and maintenance
One of the main monitoring tools to analyze production Scala applications is JMX (Java Management Extensions). This tool does its job well when we want to analyse some predefined statistics, but sometimes we need to investigate some aspects of a production application while it’s running and JMX can’t provide all required data. To deal with such scenarios, Java provides Java Virtual Machine Tool Interface (JVM TI) that allows for inspecting running Java applications but it can be used for Scala too.
Scala community, including forum, mailing list and blogs, is not the biggest in the world, but it’s very energetic. Most people who are part of a Scala community are very passionate developers, which are always happy to help others to solve their problems. Books are also great: Programming in Scala book by Marting Oderski, Lex Spoon and Bill Venners.
No one will argue that it is far behind other programming languages such as Java or C/C++. Still while looking for Scala developers we could search for Java developers with Scala interests as well. The learning curve is not massive as Scala follows Java syntax. In such case, at least on experienced Scala developer would help the team adopting new programming language.
Have you moved from Java to Scala? How do you find this language?
Thanks for sharing your opinion!