Monday, 31 August 2015

8 Myths About Software Modeling Tools and Modeling Languages

These eight myths about modeling tools and modeling languages might sound manifestly ridiculous given what we now know about how to best go about developing software in ways which ensure delivery of business benefit and minimize the scope for defects to go undetected. Yet one decade or so ago belief in the validity of these ideas below drove a global market in heavy-weight software modeling tools. This was at a time when the software industry was awash with well funded software projects all drawing from a relatively small pool of skilled programmers who took the opportunity to command strong hourly rates for their efforts. High programmer rates in turn made it easy for modeling tool vendors to enchant project managers with stories of programmer requirements being slashed through the use of sophisticated modeling tools. Remember that at the top of the price range it was typical to be charged USD10,000 for the tool, plus the same amount again for training per developer.

Myth 1. Programmers spend a long time typing.

Generating skeleton code will therefore save a lot of expensive programmer time as there will be a lot less typing to do. Skeleton code is source code without executable statements – in other words the class declarations, fields and method signatures with stubbed out method bodies. Generation of skeleton code is the centerpiece of the forwards engineering feature set, the idea being that the business-specific design work is best performed by an analyst/designer pictorially, using a modeling tool. The skeleton code can then be fleshed out by programmers who need only to focus on the detail of one method at a time without having to worry about the larger model as a whole.
Why is this a myth?
While the skeleton can account for, say, 20% or so of the final source code, it would be naive to think that this therefore equates to 20% of the whole software coding effort. The actual saving in development cost due to the generation of skeleton code is likely to have been negligible for the following reasons: 1. The slowest single-fingered programmer spends much more time thinking about algorithms, looking up examples of how to use third-party libraries, thinking of descriptive variable names, writing tests and fixing defects. In other words, even if all the time spent typing can been eliminated, programming still takes about the same length of time. 2. Even if actual typing was the rate determining step, the names of all the classes, fields and methods still have to be typed into the modeling tool. So the programmer s typing effort has simply been shifted elsewhere.

Myth 2. Programmers spend a long time deciphering hand-drawn design diagrams due to the absence of a single unified standard meaning for the symbols.

Having arrived via separate routes, leading authors had prescribed parallel object oriented modeling languages comprised of symbols to represent constructs like class, inheritance, composition and information hiding. Standardizing the nomenclature saves time spent switching between competing standards. By using a modeling tool then the tool can enforce the modeling language standards.
Why is this a myth?
People work with non-unified language all the time because there is a trade off between uniformity and freedom of expression. Here is an example to illustrate this point. If you are asked by a visitor to your office for directions to the train station, you might respond wait a second, I will draw you a map . But which pictorial language should you adopt, and will the visitor understand it? The map you draw will likely contain a clear start and finish point, with direction arrows, left and right turns, road junctions and significant landmarks. Would the communication be helped by the strict application of a modeling language in this instance? Or would, as is far more likely to be the case, a language created on-the-fly using unimpeded expression be fast, expressive and comprehensible. Obviously there are differences between specifying object oriented models and a short journey across a few streets, but there are also many similarities. Relevance of the information displayed is more significant to the communication than its strict adherence to an agreed language. Think how much an application for drawing ad-hoc street direction maps would be a pain compared to a quick sketch on a piece of scrap paper.

Myth 3. After training, customers and analyst/programmers can both understand and validate software design diagrams sat down together around a table. The diagrams can work as a middle ground that both customers and implementers can understand.

Using a requirements capture method, the functions of the new system can be described, firstly in English, and then onwards to greater abstractions detailing the static and dynamic behavior of the model.
Why is this a myth?
In practice customers relate well to use cases, but usually get lost somewhere en route to state transition diagrams and class diagrams. Even some developers fail to grasp the differences between composition and aggregation as these are notions which exist only in the model and not in the code. These days we show working software to customers, not diagrams of what the software will be.

Myth 4. Left to their own devices, programmers write software without caring whether the finished product will be used. Giving programmers a blueprint of the required system means that the goals of the system as a whole are guaranteed to be met.

A detailed up-front design adds predictability to the software creation process and assists planning the implementation effort. The more detail in the design, the greater the certainty that the end result will meet the requirements.
Why is this a myth?
Only a minority of programmers would churn out code without caring if the finished product is of use to the customer. Arguably, constraining programmers to work on small functions one at a time creates detachment from the bigger picture. Instead of the goal being to satisfy the customer, the goal is to implement a given number of methods within a given timescale. It should also be noted that this approach assumes that the design is correct . The design may be incorrect, or there may be no such thing as a correct design if there are conceptual flaws in the requirements as stated by the customer.

Myth 5. Expensive modeling tools pay for themselves in the long term.

Software programmers are expensive, so it stands to reason that reducing the need for programmer time is going to save a lot of money across the duration of the project lifecycle.
Why is this a myth?
Bearing in mind that, as stated above, this could stretch to USD10,000 a seat plus nearly as much again for training, this is quite a claim. Not that the cost of the tool and training buys more than a few weeks of programmer time, but the tool would be unlikely to save the equivalent cost because the premise upon which this claim is based assumes the project contains a high proportion of repetitive programming work which can be condensed down to a simpler modeling task. In reality, programmers are adept at avoiding repetition, using domain specific languages and other code generators, aspects, templates, inheritance and frameworks like Spring and Hibernate all to keep down the volume of verbose, hand-written code.

Myth 6. Project teams often change their mind about which programming language to use multiple times throughout the implementation phase of the project lifecycle.

Model Driven Architecture (MDA) makes the target programming language swappable. Unlike the generation of skeleton code, for MDA the result of translation of the model to an implementation (programming) language is an executable system.
Why is this a myth?
The effectiveness of MDA as an overall development approach is not the question here – rather whether the flexibility on target implementation language is that useful an option. The question boils down to: have you ever got part way through a project and wished you d picked an alternative programming language, and furthermore wished you could distance yourself from the details of the programming language? This is unlikely for two reasons. Firstly, you pick a programming language before you start development based on availabilities of libraries, tools, workforce and community knowledge. Secondly, when bugs need fixing, you need to focus in on the detail of the action of a single line of code, where platform and runtime version suddenly start to matter, not step back from the detail.

Myth 7. It is a good thing to keep the code separate to the documentation.

The code has the primary purpose of running correctly. If it fails in this purpose, the customer will not pay for the product. Usually, the code contains some work-arounds, fudges, fixes and boilerplate code all of which are ugly and obscure the picture of the business object model which project stakeholders want to see. A clean model of the software separate to the detail of the implementation can provide a more meaningful view, and it is worth keeping the model up to date as the code is developed.
Why is this a myth?
It is not a myth that a model is useful. It is a myth that it is worth the effort of maintaining the model, because that effort is considerable, and has a knock-on effect. The effort is that programmers move the codebase forwards rapidly, but in ways which respond to the discovery of limitations in the design, and to exploit better implementations as they are discovered. For example, a programmer may find that the design contains some repetition, which makes sense at the business object level, but would be a wasteful pattern to follow in the construction. However, this causes a headache at the model level. Should the model reflect the requirements as captured, or be updated to reflect the implementation as optimized? And what happens when it transpires that the design was inadequate – which we will look at next.

Myth 8. The design can be got right before the programming starts.

This is the most dangerous of the myths because it sounds the most plausible. The construction industry, for example, executes projects with a detailed up-front plan every time. The design is modeled, visualized and reviewed thoroughly before construction work commences. It therefore does not seem unreasonable that software can also be designed and planned to fit together seamlessly before the programming starts, making the programming somewhat of a formality with a predictable timeline. Therefore anything which assists the production of clear, unambiguous design takes software development nearer to that goal of assured, timely delivery of a product fit for purpose. Software modeling tools offer the promise a complete, detailed design, with a traceable history from requirements capture through to each facet of the final design.
Why is this a myth?
It is a myth because the software industry and the construction industry are different. Here are the differences: The purpose of a construction project is normally obvious. While the details of a bridge or a building require a lot of thought, the overall function can be summarized in a few sentences. This is not so with most software which has to satisfy a purpose which is hard to specify. The materials and components of construction change slowly. This is not to say that new materials do not come into use in construction, but in software the platforms, tools, libraries and frameworks change far more rapidly making it more difficult to specify up-front how easy the implementation will be and how well the finished product will perform. The complexity of the requirements is much higher for software. There simply are more conditions, rules, exceptions and special cases to the definition of a software system. Software can be adapted and changed and it makes sense to exploit that flexibility.

Closing thoughts

The software industry has come a long way in the past ten years, but the vestigial influence of modeling tools remains to this day in a couple of key places. Software tool catalogs and awards competition categories in particular still adhere this antiquated classification of development tools without waking up to the fact that the industry has long since grown skeptical of wild claims about programmer productivity from modeling tools and moved on to better approaches more solidly grounded in measurable productivity.

Saturday, 29 August 2015

What today's software developers need to know

Today's software developers don't have to worry about many things that their predecessors used to, like coding to minimize RAM consumption even if it means significantly longer execution time, or WAN connections maxing out at 14.4 kilobits per second. (Although, there may be some out-of-fashion skills they could benefit from or that may yet regain relevance.)
However, the reverse is also true: there are many new skills and areas of expertise that today's software developers, hardware developers, system and network administrators, and other IT professionals need that simply didn't exist in the past. (Where "the past" could be anything from "more than three months ago" to five, ten, twenty or more years.) Or were only relevant for organizations and applications with immense budgets.
Apache Spark
Set up and use Spark to analyze data contained in Hadoop, Splunk, files on a file system, local
READ NOW
"The list of what you need today that you didn't need before depends on how long ago you went to school, how hard you've worked to keep up on technology, the software industry, and software engineering," says David Intersimone, Vice President of Developer Relations and Chief Evangelist for Embarcadero Technologies.
Knowing what you need to know matters, whether you're just starting out as a software developer (or planning to become one), or are a "seasoned" professional who wants to keep your chops fresh so you can stay in, re-enter, or advance.
So here, as a counterpoint to my "lost skills" article, are "found skills" -- what a number of IT professionals see as these new areas for software developers that you want add to your existing knowledge portfolio. (Disclaimer: For the most part, I've left out suggestions about specific programming languages, as too obvious.)

Using libraries

"One thing that strikes me as a new skill is the need to work with massive pre-packaged class libraries and template libraries in all the new languages, like Java or C++ or Python," says consultant and software developer Jeff Kenton. "It used to be that once you knew the language and a small set of system calls and string or math library calls, you were set to program. Now you can write complex applications by stringing library calls together and a little bit of glue to hold them all together. If you only know the language, you're not ready to produce anything."
iPhone app developer Hwee-Boon Yar, who has been writing and selling software for 10 years, says "More programming resources are now available online freely. Knowing where to look, such as stackoverflow.com, as well as what habits are good to adopt in the long run is important. For example, if you become someone who Googles for a solution to a programming problem and copy and paste every time, you will never advance your skills."

Factoring in your users

Meredith Anderson, a business and information architect, adds, "In 2008, discipline keywords like 'information architecture' and 'usability engineering' were scarce in online job postings. In 2010 there were numerous job postings with these keywords. I'm not sure whether the market acknowledged the need and existing skills, or whether the need coalesced around these words to find the skills. In any case, the skill set of user experience engineering -- usability engineering, user interface design, and information architecture -- all distinct from graphic design -- has become a formal area of expertise, described by a specific vocabulary. And in the last couple of years demand for these skills has exploded."
Merryl Gross, a UI Architect in the healthcare information technology area, says, "While knowing your technology is critical, knowledge of the people who use their software, how they use it, and what's important to them about the software is critical these days, when people expect more from their devices. This will keep you from making a lot of expensive mistakes. And where you don't already have this knowledge, assuming you will be spending some of your planning time understanding why your target users like or want the things they want -- and knowing how to do this information gathering and assessment."

Asynchronous programming and other techniques

"Because of the move to cloud computing mostly through web-based interfaces, we are seeing an emphasis on asynchronous programming," says Itai Danan, founder of Cybernium a software development and web design consulting company. "Ten years ago, this was mostly used by transactional systems such as banks, hotels and airline reservations. Today, all but the simplest applications require asynchronous programming, mostly because of AJAX. This is a very different style of programming -- most things taught about software optimizations do not apply across the network boundary."
Brian Fino, managing director, Fino Consulting, an IT consulting firm that specializes in developing enterprise, cloud and mobile applications for the modern business environment, stresses the need to understand the impact of distributed, networked infrastructures, multi-core hardware, etc.
"Cheap and readily available infrastructure has made most all applications multi-dimensional and distributed," says Fino. "Software engineers have to have a good understanding of how distributed systems work from the functional right down to the packets on the wire and how they're routed."
Also, says Fino, understand multi-threaded design: "Hardware today is multi-core; software engineers have to understand how to design software that can take advantage of the hardware capabilities readily available today."

A breadth of skills

"It's become more important to have a breadth of skills" says Ben Curren, CoFounder, Outright.com, which offers easy-to-use online accounting and bookkeeping software for small businesses. "For example, web developers these days need to understand customers, usability, HTML, CSS, Javascript, APIs, server-side frame works, and testing/QA."
"Programmers don't learn that someone else is going to take care of the code they write," criticizes Sarah Baker, Director of Operations at an Internet media company. "They don't learn about release management, risk assessment of deploy of their code in a infrastructure, or failure analysis of their code in the production environment -- everything that happens after they write the code. They don't learn that a log is a communication to a operations person, and it should help an operations person determine what to do when they read that log."
Craig Schwartz, Senior Engagement Manager at Freeborders, a global IT services provider, sees three core skills being in demand: mobile development, global delivery and agile development experience. "With the growth in mobile computing, the ability to create Web applications designed to work on mobile devices, Rich Internet Applications (RIAs) for the mobile market and applications that run directly on mobile devices (Android and iOS) will be a necessary skill for developers as this market grows."
Jane Gilligan Hamner, VP Business Development, Harvey Nash USA, an executive search, professional recruitment and IT outsourcing firm, reports, "In the Chicago market we are finding that clients are requesting more client-rich application experience, such as Windows Presentation Foundation (WPF) with ASP.NET, and Ajax programming like jQuery and the DOJO Javascript tools.
It isn't just about what you already know, either. It's also about continuing to add to your knowledge and skill sets, comments Amy Wilson, Client Services Manager at web and mobile app design firm Accella. "With the ever changing face of technology, and the skills necessary to keep up with new software/hardware, programmers and developers have to be much more flexible in today's marketplace. Learning ONE language or skill won't cut it in today's workplace. Being flexible and staying up to date on new software releases is key to being a truly successful resource."

Domain expertise for new jobs

Many new jobs call for "domain" (subject matter) expertise in addition to software chops.
Mary-Anne Wolf, who is a senior software engineer, project technical lead and architect, sent me a list of four-score-plus skills and job foci; here's some selections:
  • Speech recognition-based non-visual user interface designer
  • Software designer for large-screen mobile devices with no hard disk
  • Designer of location-responsive and orientation-responsive applications
  • Specialist in software for oil and natural gas exploration and geology
  • Specialist in the design of medical devices which are embedded in the human body.
Bruce Douglass, Chief Evangelist, IBM Rational Software, suggests several areas of domain expertise, including:
  • Electric vehicle mechanics: "As automakers upgrade the features in electric, so will the amount of software code in each vehicle. Software engineers with knowledge and fundamentals on electric vehicles will be in better position to create complex battery systems, electric drive units and cabin electronics."
  • Environmental engineering: "The green movement will remain a hot button issue for future engineers. Finding new ways to improve the environment, provide healthy water, air, and land for human habitation, and to remediate polluted sites are all important areas of expertise for software engineers."

Agile and collaborative development methods

"Today's developers need to have awareness of more agile software development processes," says Jeff Langr, owner, Langr Software Solutions, a software consultancy and training firm. "Many modern teams have learned to incrementally build and deliver high-quality software in a highly collaborative fashion, to continually changing business needs. This ability to adapt and deliver frequently can result in significant competitive advantage in the marketplace.
"In order to deal with continual demands for change coming from the business, and sustain reasonable maintenance costs on their systems, today's developers need to understand how to incrementally grow their systems using appropriate quality technical practices," says Langr. "Some of these practices are: test-driven development (TDD), automated acceptance testing, refactoring, continuous integration, and continuous delivery."

Developing for deployability, scalability, manageability

"Sysadmins are likely to own the software for much longer than the developers -- what are you doing to make their stewardship pleasant enough that they look forward to your next deployment?" asks Luke Kanies, Founder and CEO of Puppet Labs: "This includes deployability and manageability. New technologies are often much more difficult to deploy on existing infrastructure because developers haven't had time to solve problems like packaging, running on your slightly older production OS, or connecting to the various services you have to use in production."
Also, says Kanies, manageability matters, "The most important part of an application's lifetime is when it's running in production, yet developers don't spend nearly enough time thinking about how to maintain the application while it runs. For example, is there debugging or performance instrumentation? If it's running slowly, can you tell why? If there are failures, can you trace the failure without the service being down? Can you hide failures from the user but still pass the debugging information on to the sysadmin and developers? Can you tune the application, or deploy more copies, without bringing it down?"

And, finally, some short sundries

Walter Gillett, a developer at software consultancy Twenty Geese Software, suggests:
  • Distributed computing technologies like Hadoop for seriously scalable cloud computing.
  • "Big data" -- analytical capabilities to deal with the flood of web and scientific data, e.g., clickstreams from a gazillion users of a large-scale web site.
  • Web application frameworks, e.g., Ruby on Rails, Grails, for high productivity.
  • Dynamic "scripting languages" that emphasize developer productivity over run-time performance, such as Python, Ruby, PERL, JavaScript, and Groovy (an alternative to Java).
Senior software engineer Amy Unruh adds, "it is useful for today's developers to understand issues in realtime search, and techniques for pipelining data analysis and for managing 'activity streams.' And you should able to exploit the 'small pieces loosely joined' model, including use of microformats, and understand how to consume APIs from other services and support relevant APIs for your service, by building on RESTful computing principles."
What new skills have you found you've had to learn -- or plan on learning?
This article, "What today's software developers need to know," was originally published at ITworld. For the latest IT news, analysis and how-tos, follow ITworld on Twitter and Facebook.
Daniel P. Dern is a freelance technology writer based in Newton Center, MA. His web site is www.dern.com and his technology blog is TryingTechnology.com.

Thursday, 27 August 2015

10 Things I Hate About Software Development

.
  1. Incompetent managers. Software development managers in general graduated from being software developers. Unfortunately, the skills you need as a developer are different than the skills you need as a manager. The best manager I ever had was not a particularly good or experienced software developer. Rather, she treated management as a profession, read books on how to be an effective manager, attended seminars, took classes, and as a result, she was good at her job. But most software-developers-turned-managers don’t treat management as a profession. Instead, some of them become telepaths, who expect you to know what they need without actually telling you; others become micromanagers, who expect to be able to do all the actual development themselves, using your eyes and hands and brain; still others become arguers, the worst of both worlds, who instead of letting you do your job, take great pride in pointing out everything they think you did wrong. So the next software job I take, I will be interviewing and trying managers carefully to make sure they know how to manage, regardless of whether they are good developers.
  2. Snotty developers. I must confess to going through a snotty phase myself. It’s part of growing up. You have to live as a snot-nosed, young-whippersnapper, green-behind-the-ears code slinger before you can mature into a wizened Yoda figure. In fact, part of me still may be a snotty developer. I’m definitely snotty when it comes to my own work, because I don’t want anyone telling me how it should be done, as long as I achieve the intended results. But as someone who’s been doing this shtick for 20-something years, I’ve grown weary of junior colleagues telling me I don’t know what I’m talking about. And when something doesn’t work out as well as they thought it should, they persistently maintain that it had nothing to do with them, despite the fact that they had ignored every piece of advice I gave them. There’s only one sure-fire remedy I know of for this problem, and that is to insist on a higher rate of pay. People may balk at paying you through the nose, but when they have to—especially managers—they not only accept your advice, they seek it out, because for the money they’re paying you, they expect you to solve their problems.
  3. Commoditization. That is, the devaluation of specialized knowledge. The most obvious manifestation of this disease is the company who outsources its development to a third-party contract shop in India or Mexico, and then wonders why the project is falling apart at the seams. A more insidious and pervasive symptom has employers and clients boil a job down to a long list of buzzwords, pattern-match résumés to those buzzwords, interview you to make sure you really do qualify for the buzzwords selected, and then look for the lowest price. And then they ask you to do everything under the sun, including those tasks that could be handled by a $20/hour contractor from Mexico. Instead, they ought to be looking for solutions to specific problems or for people to fill specific roles within the organization. For veteran jobs, that’s no longer about price, however, because if you’re specific enough, you’ll likely find only one or two qualified candidates, if you search for them, and whatever they want to charge you, you’ll pay. Again, the only sure-fire antivirus I know of is to demand a higher rate of pay, because for the money they’re paying you, they won’t treat you like a commodity.
  4. Slipshod engineering practices. I am one of those programmers who actually believe software development is engineering. Many developers don’t believe in software engineering, or at most give it only lip-service. But software engineering is like gravity: you may not believe in it, but the result is the same when you step off that cliff. Developers who don’t believe in engineering experience bugs, hold-ups, overwork, and stress. To account for it, they blame the code, the programmers who worked on the software in the past, their development environment, the operating system… But they never do anything to fix it, because “we just don’t have the time.” Note, however, just because developers complain about not having enough time to fix the system doesn’t mean they’re using slipshod engineering practices. In fact, those developers who don’t complain are probably the worst offenders. Often, good developers complain about the code, but it’s really not that bad, because they’ve already fixed the worst parts of it, and the problems that are left just stick in their craws. These are the developers I’d love to work with. The quickest way I know of to assess the situation is to look at the code: Is it well-architected? Well-designed? Are there unit tests? If so, the team is probably using good engineering practices.
  5. Neglect of quality. By “quality,” I don’t mean over-designed, fluffy, overly glitzy software. What I mean is, simply, software that works, that satisfies the customer’s needs, makes the customer swoon, has no bugs, does not constantly poke you in the eye—”See that?!” Ow! “See that?!” Hey! Cut that out! Quality is important, because it gives a team of engineers a sense of accomplishment, of pride, a healthy morale. And engineers who value quality will be professional, always improving their craft, always building better and better software. Again, a quick glance at the codebase should give some idea as to how highly the team values quality, because a quality team will use sound engineering practices. But you could also look at the finished product, and especially customer comments on the product and its support.
  6. Black-and-white thinking. Frankly, I hate having my good ideas shot down with dismissive comments like: “Unit tests don’t catch every bug.” Yeah, but they catch more bugs sooner and cheaper than any other method of testing. Polarized, black-and-white thinking is actually a sign of depression, of hopelessness, of having given up. “My life isn’t perfect; therefore, I have no reason to live.” Sounds silly when put that way. But how many software teams are in a similar, self-imposed depression? “That technique can’t solve all our problems; therefore, it’s not even worth trying.” Almost every team has a naysayer, but such sentiments can cause actual depression in the more innovative among us, who actually want to better the team and its engineering practices. The antivirus is simple, if not easy: Early in working with a team, try to find one or two simple process problems and propose simple, direct solutions. Then sit back and see what happens. If you get a lot of hemming and hawing and ignoring and naysaying, think about whether you should split.
  7. Focus on establishment. Humans have a natural need for stability and for camaraderie. That is, they need to feel like the floor is firm beneath their feet and that there are others on their side. But in some companies, these tendencies can become dysfunctionally pervasive. If you continue to do only what you’ve always done, only what everyone else is doing, you’ll always be safe from blame. But humans also innately need to do what they haven’t done before, to stretch their minds, to create. Because this gives one a sense of purpose. Rather than playing it safe, we shouldalways be trying new things, and keeping those that work. But the dysfunctional company focuses on establishment, rather than on results. The antivirus is similar to that for black-and-white thinking. Early in the experience, try something new, and then see what happens. Do it early, before you develop an emotional investment in the project. It might even be best if the thing you try fails completely, because then you can see how the team handles failure. Even if your experiment fails, they should not make you feel like a failure for having tried it. If they do, think about whether you want to stay there.
  8. Ignorance of modern research. Quick! Name at least 2 of the 9 teamwork-killersTom DeMarco and Timothy Lister identified in their landmark work? It should be pretty easy, because they identified 7 of those 9 back in 1987. That’s what I mean by “modern.” Here’s another one: What 3 characteristics must a software team exhibit in order to have any reasonable chance of success, according to Alistair Cockburn in his research? Peopleware (2nd ed. 1999) and Crystal Clear’ (2005), for starters. This is what I mean by “modern.” Heck, we might as well even include The Mythical Man-Month in the list, because too many software engineers have never read it, either. At my next interview, while the development staff are quizzing me on my knowledge of Perl programming, PHP, and JavaScript, I’ll be sure to quiz them on their knowledge of Demarco and Lister, Cockburn, Schwaber and Beedle, Kent Beck, Michael Feathers—and of course, Frederick Brooks.
  9. The blame game. Being caught in the blame game can cause stress, exhaustion, demotivation, and depression. It can also be the source of other maladies, such as black-and-white thinking, as engineers attempt to cope. Unfortunately, staffers don’t usually like to talk about the blame game, but a pointed interview question might reveal something. Something like: “Tell me about the last, big mistake someone made that cost the company money.” What was the fallout? Did anyone get yelled at? Fired? In a perfectly healthy organization, no matter how bad the error was, no one will have gotten yelled at; rather, it will just be accepted that everyone makes mistakes, because we’re all human, and the whole team will have looked at theprocess (rather than any particular person) to see how to avoid an analogous oops in the future.
  10. Unrealistic expectations. I’m talking about the top-down variety here. Yes, engineers can—and frequently do—have unrealistic expectations of themselves. But that’s easily enough fixed. (Or at least I know how to fix it, with a bit of measurement, in my own estimates.) But I’m talking here about something different: Management wants such-and-such at such-and-such a date, and they won’t accept your promise that it simply can’t be done. When faced with such a situation, there are only 4 things you can do: Deliver less functionality. Take longer to deliver it. Reduce the quality (leading to delays because of unexpected bugs, and see #5 above—better yet, forget about sacrificing quality). Or spend more money (but adding people to a late project only makes it later—that’s Frederick Brooks, see #8 above). Management, under pressure, may not want to make real-world trade-offs, leading to overwork, demotivation, and depression for the engineers. Like the blame game, I don’t know any sure-fire way to discover this problem early on, because no one wants to admit to a new recruit that he’s walking into the lion’s den. But you might try asking about the team’s last overconstrained project or iteration, with a knowing, Columbo-esque gaze, and see if it prompts any reaction at all.

Tuesday, 25 August 2015

CBSE Class 12th Computer Science: Tips and Tricks


In today's Global World, Computer Science is as important a language as any other. CBSEComputer Science from Class 11th to Class 12th provides a solid foundation for any future endeavors you may wish to take, with Computer Science by your side. However the last barrier remains the CBSE Class 12th Computer Science exam, here are some tips to help you clear the exam with flying colors. 

Syllabus

1. Object Oriented Programming in C++ (30 Marks)
2. Data Structure (14 Marks)
3. Database Management System and SQL (8 Marks)
4. Boolean Algebra (8 Marks)
5. Networking and Open Source Software (10 Marks)
Total: 70 marks (theory)

Tips

  • The key to a successful Computer Science exam is understanding. As majority of the question paper is based on programming, the only way to score is by having a thorough understanding of programming
  • Create your own notes for the important terms and concepts after you understand them. The given notes in a book would be good for learning but for revision your notes will give you the exact information you need
  • Clear any doubts you have as soon as you can. Use your Class 11th computer science books or reference books to clear your doubts, but the best solution would be to ask a teacher
  • Practice all the exercises and questions available in your text book
  • Use flashcards to remember definitions
  • Remember to study definitions and their basic applications thoroughly, questions often arise asking for explanations of topics
  • Create flowcharts to help you understand and remember programming
  • When you practice writing programs try to maintain the required spacing, even if you are answering only in rough. Getting into the habit of writing according to the proper spacing will help you
  • If you have time use different color pens/pencils for different areas to help you visually remember them
  • Pay attention during practical classes, this will help you score high in the practical marks section which is worth 30 marks and also help clear your doubts
  • Revise by practicing programming on a Computer, you will immediately find out where you stand in terms of how many programs you can successfully write/run
  • Charts are helpful when you are preparing for Boolean Algebra
  • Pay attention to details, a single misplaced punctuation mark can ruin an entire answer
  • Practice sample papers/previous year papers to understand the pattern, test your preparation and identify your weak areas
  • Remember to always correct the papers you attempt so you can find and improve your weak areas

Monday, 24 August 2015

Top 10 tips for creating Software as a Service business opportunities

Customers, resellers and solutions providers have been apprehensive about jumping into the Software as a Service (SaaS) market, but these tips on creating SaaS business opportunities explain the new line of thinking that has redefined the roles of solutions providers and decision makers. These tips demonstrate how you can take advantage of the many revenue possibilities that SaaS provides, but you have to have a strong understanding of what your customers' needs are and how SaaS can meet them. 
  1. SaaS market gives rise to new software sales decision makerAs the market for SaaS continues to progress, end users have turned into decision makers. Now that you have have been forced to rethink your strategy when creating SaaS business opportunities, use this tip to find out what changes you need to implement in order to make your SaaS services appealing to end users. This approach includes trying to lowertotal cost of ownership (TCO) and learning how to deal with vendors that have based their go-to-market strategies on circumventing the IT department.
  2. Selling Software as a Service: How and why providers need to change their thinkingHow do you plan on becoming accustomed to the SaaS business environment? This tip explains why you need to change your perception of selling SaaS when sales cycles are shorter and the volume of SaaS contracts is higher. The focus of solutions providers is shifting more toward helping customers use the applications effectively while ensuring their needs are met rather than just making sure they work.
  3. Stay competitive with SaaS BI servicesYour role as a solutions provider has changed a bit since the implementation of SaaS in the market, but you'll learn that having on-demand business intelligence (BI) services can be appealing to companies. Trusted third-parties have maintained tremendous value, even in the transition to the SaaS market. See what type of objectives your customers will require you to meet when creating SaaS business opportunities through BI services.
  4. Addressing IT decision makers' SaaS concernsAre you dealing with IT departments that are resistant to SaaS and wonder about its reliability and security? You aren't alone, and you need to be prepared to answer questions customers have about the day-to-day concerns about SaaS. Expert Jeffrey M. Kaplan details how to address these apprehensions by using a proactive approach. After mapping out performance objectives with your vendor, Kaplan explains the importance of assessing TCO and return on investment when creating SaaS business opportunities.
  5. SaaS vs. desktop virtualization solutionsWhen customers are trying to choose between SaaS and desktop virtualization, they will often look to you for advice. This article highlights the three most important considerations when making the decision: complexity and cost, endpoint requirements and maintenance, and reliability. Once you are informed about the benefits of each, you'll be more prepared to help customers decide whether SaaS or desktop virtualization meets their needs.
  6. Making money selling SaaSSelling Software as a Service can be extremely profitable if you are able to explain to customers how and in what capacity SaaS is applicable to their business requirements. Find out what you need to focus on when selling SaaS and why the subscription model gives SaaS revenue good growth potential.
  7. Best practices for selling Software as a ServiceSaaS has a variety of low-cost options. Take a look at the best practices and components of SaaS that can be used as key selling points. Knowing about SaaS features and sales methods in this expert response can help you modify your proposal depending on a customer's needs.
  8. SaaS migration spurs VARs to rethink services and support modelsIf you are looking for different ways to offer services and support, the SaaS program developed by Bluewolf, a longtime Salesforce.com partner, could serve as a deployment model. Beyond Salesforce.com, SaaS support programs can relieve concerns about pricing and address the constant need for newly deployed applications to be implemented, customized and supported.
  9. VARs rethinking services they offer customersThe impact of the SaaS market has left both vendors and resellers rethinking the services they offer customers. In this article, experts answered questions about the role the channel plays when solutions providers look for SaaS business opportunities.
  10. Checklist: SaaS revenue opportunitiesYou have probably heard lingering concerns that SaaS will squeeze out VARs, but this checklist shows a number of specific SaaS revenue opportunities. The list makes it clear that creating SaaS business opportunities doesn't diminish the role of third parties, but it does change their responsibilities.

Saturday, 22 August 2015

SOFTWARE JOBS...

Find your Software Developer job with Robert Half.
At Robert Half Technology we work with leading companies in Australia. We are currently experiencing a strong demand for Software Developers with the ability to scope their own requirements as well as complete the development.
As a Java, C#, .Net, C , Sybase and Oracle Software Developer you will be involved in greenfield and/or business-as-usual projects. You will report into the Development Manager and liaise with Business Analysts and other stakeholders to ensure the software project meets set requirements. You will also be responsible for the creation and ongoing adaptation of software solutions to ensure the final product meets business requirements. Strong verbal and written communication skills are an advantage. Greater opportunities exist for Developers who have the ability to scope their own requirements and

Other Robert Half Software Developer jobs in Asutralia:

Contact us to speak to one of our specialist technology consultants about your Software Developer job search today.

Location Brisbane CBD
Exciting temp and perm opportunities across multiple clients - Short and long term positions - Varied skillsets required - Java experience essential!

Location Inner Suburbs Perth
Our client is currently seeking an experienced .Net Developer for a 6-12 month contract to start ASAP.
Location Northern Suburbs Brisbane
An opportunity exists for a Full-stack .NET developer to join a business with global reach based in Brisbane's northern suburbs.

Thursday, 20 August 2015

12 Computer (PC) Tricks You Should Try Right Now

Computers have simplified our life to a great extent. Things that were impossible earlier can now be completed instantly thanks to computers. However, this does not mean that a PC is all work and no play.

Here are some of the best tricks you can try out on your Windows based computer.

Computer Tricks
  1. Have fun with Notepad
    If you think that Notepad is just a basic text editor, then, you will be amazed by its capabilities. You can use Notepad to create everything from personalized logs to harmless viruses that are incredibly annoying.Go see this post to know just how useful Notepad is.

  2. Command Prompt too has some tricks up its sleeves
    If you think that the Command prompt is a boring old program that no one uses, you are making a huge mistake. It can be used for everything from watching ASCII Star Wars to making folders that you cannot delete. See this post to know about all the cool stuff you can do with the Windows Command Prompt.

  3. Use Keyboard Shortcuts to get work done in no time
    If you are tired of having to alternate between your mouse and keyboard to operate your Windows computer, you would love to know these really useful keyboard shortcuts which greatly increase your speed and efficiency. See this post for details.

  4. Make your computer speak what you type
    You can use your PC's built in features and some VBScript magic to create a simple program that will make your computer speak whatever you input to it. Enter the right words and you could imitate a real conversation. Head over to this post to talk with your PC.

  5. Make your computer greet you every time you start Windows
    A simple modification in the previous trick will make your computer welcome you in its own mechanical voice every time you log onto Windows. This is achieved by placing the VBS script responsible for making your computer talk in the Start up folder. Read this post to have a computer said welcome.

  6. Find your computer's gender
    Want to know if your PC is a male or a female? Simple. Try the previous trick to know if your computer is a 'he' or a 'she'. On a serious note, this depends upon the voice you have selected in Microsoft Text to Speech options.

  7. Lock Folders with password
    If you have important personal files that you do not want other people to see, you can hide them in a password protected folder to prevent unwanted users from seeing them. Go see this post to hide your personal files effectively.

  8. Change your Processor's name
    PC Tricks
    If you are bored of your old processor and want a new one with a staggering name, you will definitely want to see this trick which allows you to change its name to something extraordinary to make your PC special.

  9. Make a Keyboard Disco
    You can use some VBScript coding to create a live disco on your keyboard by making the LED lights flash alternately. See this post to know how your keyboard can turn into a disco.

  10. Recover permanently deleted files in Windows
    If you have ever deleted a file in Windows that you did not want to and now want to recover it, you would definitely want to know about some free tools to recover your deleted files easily.

  11. Use your Keyboard as Mouse.
    You know you can use your mouse as keyboard using the On-screen keyboard utility. What if I tell you that it is also possible to do the reverse? Just read this post to see how.

  12. Disable USB ports to prevent others from taking your data
    Ever wanted to disable your USB ports to prevent others from using their flash drives on your PC? This post explains how to do just that with a simple registry trick. Do note that disabling USB ports will also disable your USB connected peripheral devices.