5 Must have skills for Software Developer

5 Must have skills for Software Developer

Problem Solving Skills:

On day to day basis, developers are handed over myriad problems to solve. Each could have different ways to solve. Using the various programming tools, techniques and creativity, developers need to solve the problem. Problem-solving skills are core to a software developer. Without it, developers are more likely to write code which fails to give desired outcomes. A good way to learn the best practices of software development is by learning from the suggestions of the experienced developers. Read and subscribe to various different technical blogs. Also, there are many sites that provide free training programs like coursera and udemy. Sign up and start learning.

Business Skills:

Understanding business significance of an application is something lot of developer don’t understand. Understanding the needs of client and business can give a wealth of insight into developing the application. A lot of developers often overlook the importance of business skills.

Communication and Interpersonal Skills:

ALL Most developers, use a lot of technical jargons dealing with non-technical stakeholders. Software developers must be able to communicate (both verbal and written) the information clearly to their stakeholders using simple words and non-technical jargons. Written communication skills matter a lot and have greatest impact when documenting and code commenting the application.

Programming Competency:

Well, if you cannot code you are not a software developer. This is supposed to sound obvious. As a software developer, you should be aware of multiple web, mobile and desktop frameworks and languages. You don’t need to be good at all of them. But you should have some basic understanding of them. One very important soft skill a developer should possess is – A good eye for detail. Few other specific skills (not a complete list) that a developer should have:

  • Security
    • Understanding Security has become such a fundamental skill a developer need to possess that it cannot be emphasized enough. With numerous security breaches happening, you need to defend your application from them. Developer should be writing defensive code from the ground up. Security should not be an after thought. As developer, get a thorough understanding of (not a complete list):

And so much more that we will need a separate blog post for that. You can start by reading Google’s Security handbook, The Web Application Hacker’s Handbook and  OWASP development guide – covers Web Site security from top to bottom.

  • Performance
    • Building a website that will potentially have millions of users? You really need to start thinking about performance and scaling in such projects. Please note I am not advocating, that you forget about scaling and performance when dealing with small applications. All I am trying to emphasize upon is the need for it is huge when dealing with big sites. Few considerations:
      • Implement caching and use HTTP caching
      • Optimize images
      • gzip/deflate content
      • CSS Image Sprites
      • Minification tools
      • CDN use for static contents

Visit Yahoo’s Exceptional Performance site which has lots of great guidelines, including improving front-end performance. Also, check out Google’s Page Speed, another tool for performance profiling.

Keep Learning:

Software industry is growing constantly, so a culture of continuous learning must be embraced. New and updated languages, platforms, tooling, framework, patterns and softwares keep popping up literally every day. A passionate software developer must possess the zeal for learning the new trends and upgrading their skills. Some of the sites offer free courses online. Please register and make use of them:

33 Top Tools and Resources for Software Projects

Startup Tools

Working on a new start-up? Below is my list of must-have Top Tools and Resources for Software Projects. These are the some of the tools that I have enjoyed using in the past. Please feel to add your own in the comments.

Requirement Gathering

  • User story is a tool used in Agile software development to capture a description of a software feature from an end-user perspective. The user story describes the type of user, what they want and why.
    Check out – http://www.storyboardthat.com/articles/software-development/agile-user-stories
  • Mind Map is a diagram used to visually organize information. A mind map is often created around a single concept, drawn as an image in the center of a blank page, to which associated representations of ideas such as images, words and parts of words are added. Major ideas are connected directly to the central concept, and other ideas branch out from those. Mind maps can be drawn by hand, either as “rough notes” during a lecture, meeting or planning session, for example, or as higher quality pictures when more time is available. Check out – http://www.mindmapping.com/

Text Editor
Bracket is a modern, open source text editor that understands web design. Honestly, I have tried couple of editors in the past like Sublime, NotePad++, TextPad, etc. but by far Bracket is the best.

Mockup tools
My all time favorite is  Balsamiq. Click here for an article from mashable – 9 Excellent Tools for Design Mockups. Also, check out MockFlow (design UI workflows). I have heard good reviews about them. Another similar tool, I have used is GenMyModel . Worth giving it a shot.

Project Management
The best in my experience for small team Project Management and Todo tasks is Basecamp. Basecamp’s unique blend of tools is everything any team needs to stay on the same page about whatever they’re working on. Check it out – https://basecamp.com/

Database Design
You can use locally hosted tool like SQL Management Studio or SQL Developer to design, develop and maintain databases or you could online tools like Vertabelo.

Web Dev, Debug and API Tools

  • JSFiddle is an online playground to code and share code, this time with many flavors of JavaScript. Check it out – http://jsfiddle.net/
  • Koding is a software development in an online environment with lots of social activity. It’s StackExchange + Facebook + Cloud9 + Virtual Machines + a few other things. It’s a great idea and worth a try. Check it out – https://koding.com/
  • Regular expression tester with syntax highlighting, contextual help, video tutorial, reference, and searchable community patterns. Check it out – http://regexr.com/
  • Firebug is a free and open-source web browser extension for Mozilla Firefox that facilitates the live debugging, editing, and monitoring of any website’s CSS, HTML, DOM, XHR, and JavaScript. This one tool i cannot live without – http://getfirebug.com/whatisfirebug
  • Fiddler is a free web debugging proxy for any browser, system or platform. Check it out – http://www.telerik.com/fiddler
  • Rest API – One of the best testing REST API services is Postman. Please give it a try at https://www.getpostman.com/. Another super cool Firefox extension I have used before and love it is RestClient for Firefox. And of course I cannot miss out on swagger.io API Framework.

Team Messaging
Slack brings all your communication together in one place. It’s real-time messaging, archiving and search for modern teams.

Task Management
Trello is the free, flexible, and visual way to organize anything with anyone.

Issue Tracking
Undoubtedly the best in this space is Atlassian Jira.

Version Control
Stash (Bitbucket) – Git, your way. See what makes Bitbucket the Git solution for professional teams.

SourceTree is a free Mercurial and Git Client for Windows and Mac that provides a graphical interface for your Hg and Git repositories.

Build Tools
Integration build tools have plenty to do. They fetch software from the SCM, figure out dependencies, compile everything to make the deliverable product, package it up, and even deploy to test servers. Few nice Integration tools include:

IDEs in the Cloud
IDEs are traditionally used locally, on the developer’s workstation; however, some companies, including Cloud9, Compilr, and Nitrous, want developers to use their hosted IDEs in the cloud.

Continuous Integration (CI)
Per Wikipedia, Continuous integration (CI) is the practice, in software engineering, of merging all developer working copies to a shared mainline several times a day. It was first named and proposed by Grady Booch in his 1991 method,[1] although Booch did not advocate integrating several times a day. It was adopted as part of extreme programming (XP), which did advocate integrating more than once per day, perhaps as many as tens of times per day.

The CI server that everyone has heard of is Jenkins, but there are plenty more. Others include JetBrain’s TeamCity, CruiseControl, and Atlassian’s Bamboo. CI servers are also available as cloud services. Hosted CI has the added challenge of connecting with other hosted services. Codeship and Travis can all read from GitHub and write to Heroku.

Really useful links:
What are some great online tools for startups?
Top Startup Tools
Startup Tools by Steve Blank

REST vs SOAP

REST is an architecture, SOAP is a protocol.

Per Wikipedia, Representational state transfer (REST) is the software architectural style of the World Wide Web.  REST’s coordinated set of constraints, applied to the design of components in a distributed hypermedia system, can lead to a higher-performing and more maintainable software architecture. To the extent that systems conform to the constraints of REST they can be called RESTful. RESTful systems typically, but not always, communicate over Hypertext Transfer Protocol (HTTP) with the same HTTP verbs (GET, POST, PUT, DELETE, etc.) that web browsers use to retrieve web pages and to send data to remote servers.

And SOAP, originally an acronym for Simple Object Access Protocol, is a protocol specification for exchanging structured information in the implementation of web services in computer networks. It uses XML Information Set for its message format, and relies on application layer protocols, most notably Hypertext Transfer Protocol (HTTP) or Simple Mail Transfer Protocol (SMTP), for message negotiation and transmission.

So What is difference between the two?

 RESTSOAP
Business logicUses URI to expose business logicUses services interfaces
CacheableREST reads can be cached built in to the architectureRPC communications are often not cached as part of the HTTP stack
ComplexitySimple HTTP requests that return results in JSONSOAP is a more complex API that communicates by passing XML around
Data FormatHTML, JSon, XML, Plain text, etc.XML
Messaging SupportClient handles communication failure by re-trying.SOAP has successful/retry logic built in (WS-ReliableMessaging)
Mostly usedPublic API'sEnterprises
OperationsGET,POST,PUT,DELETEPOST
OverheadLess bandwidth and resources.More bandwidth and resources. SOAP Envelope to wrap each calls.
ProtocolHTTP (Typically)HTTP, FTP, SMTP, etc.
SecuritySSLSOAP supports SSL (just like REST) it also supports WS-Security
ShareYou can easily share the URL around.Unable to share the URI. SOAP describes a series of methods, along with their parameters and return values.
SpecificationLooseRigid
Transactions SupportYes, but it isn’t as comprehensive and isn’t ACID compliantFull Supports (WS-AtomicTransaction)
WADL/WSDLWADLWSDL

 

  • REST is good for exposing public API’s over the internet to handle CRUD operations.
  • REST is focused on accessing named resources through a single consistent interface.
  • REST is implementation-agnostic and much more transparent, and this makes it great for public APIs.
  • REST version are simpler, clearer, run faster, and uses less bandwidth.
  • SOAP brings focuses on operations and exposing pieces of application logic (not data) as services.
  • SOAP is focused on accessing named operations, each implement some business logic through different interfaces.
  • SOAP has very little if anything to do with the Web. REST provides true “Web services” based on URIs and HTTP.

References: