10-12-2020

How To Become A Rapid Prototyper (Part 2)

In part one of our Rapid Prototype series, we discussed why rapid prototype solutions are used and the benefits of such solutions. In this post, we’ll discuss how you can level up your rapid prototyping skills and important technical knowledge areas to have experience in. Our final post in the series will walk you through a real-world rapid prototype example.

Choose The Right Technology

Being able to choose the right technology for your prototype is essential to becoming an excellent Rapid Prototyper. One way to help you do this would be to learn as many different programming languages and paradigms as you can. Can you write a Procedural or Functional script? Can you code an Object-Oriented application? Not one language or paradigm is best for Rapid Prototyping.

When faced with a Rapid Prototyping task, you should understand the problem and be able to quickly research what is the best tool to use. Is the best language for the job already available to you, is there an existing tool you can repurpose or modify, can you get these tools, do you have any SMEs in your network you can reach out to, or do you need to develop a prototype using the tools already available to you?

Take Aways

  • Know what’s readily available/remain flexible.
    • Just because you’re good at a specific language, doesn’t mean you should only use that language. Where the prototype needs to be used might not support that language or another language may already be available or be more efficient for the problem domain you are working in.
    • Weigh the time/effort it will take to enable you to work in your language of choice vs learning a new language that is readily available.
  • Reuse where possible.
    • Take an application that is close enough, copy and modify to suit the current need.
    • Reuse existing functions and code libraries.

Rapidly Learn New Technologies

While not everyone has the time to learn “all the languages”, you can learn the basics of all the programming languages. Modern languages have a root in common older languages, which makes them all fairly similar to one another. At least in that, they have the same constructs and concepts, such as data types, recursion, garbage collection, if/then/else statements, loops, pointers, and exceptions. Knowing the basics of programming languages makes it easy to research and learn the syntax of any new to you language.

The same goes for databases. There are many types and flavors of databases, relational, NoSQL, and graph, for example. If you understand that data can have relationships, be indexed, stored with key/value pairs, and some sort of security and then that databases allow for insertion, modification, and deletion of data, then you have a good start for knowing the basics of “all the databases”.

You don’t need to know all the technologies in depth and every nuance about each one. You should know the generalized basics so you can quickly lookup, for example, how to do string manipulations in Perl or how to connect to a SQLite database using Python. There are plenty of examples that exist out in the wild wilderness of the internet for almost any coding question you may have.

Take-Away

If you know the basics of programming languages and databases, you can probably find an example of what you need with a quick internet search.

Other Useful Skills

Find and bookmark a few good Regex resources. You should have a resource you can test custom regex and a few different ones to look up how to write various regex. Each language handles pattern matching differently, so having different resources can help you build the best regex for your current prototype.

Know where your system and application logs are. You’ll want this information handy when troubleshooting. Troubleshooting is another skill you should strengthen. Since you are creating Rapid Prototypes, there will be several errors made, as it may be quicker to have the prototype throw the error so you can trace the issue versus researching how to perfectly executed code. Since we are tracing errors, one of the first things you might want to research for a new language is how to catch exceptions/errors or how to print custom messages to standard out.

Keeping with our troubleshooting theme, being able to use web browser developer tools makes debugging and testing tweaks to CSS so much easier and faster. Work on becoming familiar with these tools for each web browser as each browser has its own nuances, so depending on your requirements and what main browser your customer will be using you’ll want to know how to debug in that browser.

Experience with a few different IDEs can also be useful. Some IDEs are better suited for specific languages and others are lightweight and can be set up quickly and are useful for multiple languages. I would also argue that being proficient with vi/vim is beneficial. Sometimes you can write a throwaway script quickly in vi, run it, debug, run it again and get to the solution before you could install an IDE.

Knowledge of a variety of network tools, such as Wireshark, netcat, and tcpdump, will not only help you troubleshoot issues and identify signatures within network traffic but will allow you to create customized network traffic. This will help you ensure scripts and analytics can properly handle or identify specific network behaviors or protocols prior to those behaviors causing havoc on your networks.

In the final part of this series, we’ll walk you through a real-world example using what we’ve discussed in parts one and two. This example will also show you how having a basic knowledge of HTML, CSS, and JavaScript can help you create a rapid web application prototype.

About the author

Christie C. has over 15 years’ experience developing and engineering software solutions, most of which have been with Parsons supporting the U.S. Department of Defense. Currently Christie is the Chief Engineer for a program which provides rapid prototypes and analytics for cybersecurity operations.

Back to top
facebook-pixel linkedin-pixel linkedin pixel focused image adnxs image pixel