Introduction to the BusinessProgramming.com Text
Contents:
1. The Case for Non-Programmers "Learning to Program" with REBOL
1.1 Motivations and Road Blocks
1.2 Why "Off the Shelf" Software is Prevalent, but Rarely Ideal
1.3 Paper and Pencil, Spreadsheets, and Office Applications
1.4 Custom Software Solutions
1.5 The Benefits and Challenges of "Learning to Program" Custom Software
1.6 A Uniquely Practical Tool
1.7 The Goal is to Improve Overall PRODUCTIVITY and CAPABILITY
1. The Case for Non-Programmers "Learning to Program" with REBOL
1.1 Motivations and Road Blocks
Computer technology provides tremendous potential ability to improve productivity in all areas of business. Simple technology solutions can improve performance in accounting, inventory management, point of sale, billing, collections, scheduling, payroll, project management, marketing, sales, manufacturing, communications, and other critical processes. In today's environment, hardware, software, and network connectivity are all inexpensive commodities, and a minimal level of computing competence is expected of employees in all levels of business organization. Using available technology only increases competitive edge and improves bottom line results.
For those reasons, the core activities in many modern industries consist of using custom designed software. Additionally, programs such as Excel, Access, and Quickbooks are employed to perform daily data processing routines. Skill with these software tools is essential in various job positions, but "programming" skills are rarely considered essential for all but professional developers.
Of course, that's not surprising. Despite potential benefits, "learning to program" is a deep topic, and the path to acquiring specific software development abilities can be overwhelmingly confusing and time consuming. The productive benefits may be apparent to some people, but the learning process can be so challenging and long winded that even approaching the fundamental concepts is a tremendous hurdle. An accountant who needs to perform complex manipulations with spreadsheet data may decide that "learning to program" is worth the effort. A marketing manager who regularly uses web and email technology may also contemplate the benefits of "learning to program". An IT manager who encounters repeated software installation and use problems may likewise consider "learning to program". In those three cases, the path to "learning to program", the skill sets, and the end goals, are quite different. Each track generally involves studying incompatible tools and approaches. The accountant may learn VBA to add extended data processing features to spreadsheets. The marketer may learn just enough HTML, CSS, Javascript, PHP, MySQL, Linux and server infrastructure, etc., to customize existing open source scripts. The IT staff may learn some Python, AutoIt, or other scripting tool to create software installation packages and to automate user interaction. Learning to connect data between applications in those diverse paradigms, however, requires much deeper experience. Just supporting multiple mobile, desktop, and web platform user interfaces, for example, increases the learning curve dramatically - to the point that learning those skills is simply not practical.
The path to learning a full gamut of useful "business programming" skills traditionally involves exploring dissimilar development methodologies, conflicting approaches to design and workflow, varied IDEs, libraries, tool chain preferences, and a generally confusing mess of technologies that leaves those with even the greatest motivation, lost in apparently endless complex study. Owners, managers, others involved in strategic planning and operations - even IT staff - rarely have the time to dig deeply enough into "learning to program" to actually make it worth while. That work is left to developers.
1.2 Why "Off the Shelf" Software is Prevalent, but Rarely Ideal
In any business, solutions to critical operational road blocks are required immediately. Implementing existing third party software generally provides a quick solution to any computing task at hand, and normally yields successful short term results. For this reason, using off-the-shelf computing products is the favored approach to solving technology problems.
The typical "square peg in a round hole" computing problem discovered by managers in all industries is that off-the-shelf software packages are designed to be sold to the largest possible number of users across a given industry. Such applications are rarely a perfect fit for the exact use any business requires. Point of sale, inventory, and accounting systems developed to serve the needs of all the businesses in an industry, for example, are either too bloated and complex, too simple, or lack specific features an individual user requires for their chosen pattern of operations. Businesses are forced to adjust their operating procedures to fit the features provided by one-size-fits-all, preconceived software solutions. Project managers may go through a lengthy and expensive process of determining which available commercial packages come closest to fitting their needs. Implementation, training, and technical support costs related to testing, installing, using, and maintaining such packages typically impose significant IT expense. Workers become reliant on installed software, and a combination of incompatible third party packages leads to large scale, mission critical systems comprised of components which don't work well together. Expensive daily labor is required to repeatedly integrate data between mismatched software solutions. When business needs change enough to exceed the limitations of existing software packages - and that situation is encountered at some point in almost every business experience - data often must be migrated to entirely new software, re-training is required, the risk of potential incompatibilities and necessary costly updates increases, and productivity is severely interrupted. You've probably witnessed this condition at businesses which have publicly visible operations: problems at a retail store, bank, or service center where "the new computer system" is giving workers difficulty.
A familiar solution to avoiding upgrade problems, protecting investment in existing systems, improving functionality and interoperability, and dealing with inevitable changes to software requirements, is to build third party add-ons and extensions. For example, it's common that small businesses require special reports which aren't possible using the built in reporting capabilities of Quickbooks. Using data exported from Quickbooks, such reports are easily created with MS Access, but the process of creating the new report in Access, performing routine exports, running the third party program, importing data, etc., is time consuming and error prone. The potential to build macros and/or to make use of scripting APIs in many software packages, in order to automate such complex routines, only adds layers of complexity and commitment to fundamentally imperfect generic software solutions, and may actually encourage time consuming error prone usage patterns. As it turns out, building add-ons, macros, and other glued together solutions often requires more total time, money, and repeatedly wasted effort for everyone involved. It's not uncommon for hacked together computing systems to drain more resources than the original problem they intended to solve, especially when the solution is used by many workers in an organization.
1.3 Paper and Pencil, Spreadsheets, and Office Applications
For small projects and trivial daily routines, software solutions are likely never even considered an option. Other less perfectly engineered approaches are chosen to solve small daily problems that impact productivity negatively. Normally, such "other" solutions make use of whatever accessible tools are on hand to provide a functional solution. Very often, workers use paper and pencil to manage simple daily activities. Small bits of scheduling, payroll, inventory, sales, accounting, departmental communications, and other data can be found floating around offices regularly on pieces of paper, before being entered into "official" computing systems. Often, such routines and patterns could be dramatically improved, error proofed, standardized, and made more efficient using simple custom apps. Ideally, those simple apps could ultimately be integrated into the core business software package and workflow routine.
Beyond paper, pencil, hand held calculators, and other manual shortcuts, spreadsheets are the most used tool. This is understandable because spreadsheets provide an intuitive free-form user interface for neatly entering, selecting, copying and altering data, and formulas for performing computations on units and lists of data values. In many cases, specifically when totaling columns of numerical values, this paradigm works perfectly (because it is a spreadsheet's fundamental use case). For this purpose, spreadsheets are ubiquitous, and are in fact considered a requirement for working in job positions which routinely deal with lists of data. Accountants, inventory managers, sales people, payroll managers, scheduling managers, secretaries, etc., use them to tally numbers, enter schedule info, collate HR data, and to organize and share daily information management tasks.
Unfortunately, simply because spreadsheets are so powerful and ubiquitous, they are often overused and misused. For applications which require multiple user input, protected data fields, large data sets, special searching, sorting and reporting capabilities, parsed data operations (data mining), and many other typical workflow cases, spreadsheets can be error prone, awkward, and under powered tools. Spreadsheets also encourage users to create their own independent workflows, storing important bits of data in obscure personal files which are scattered, lost, and never effectively integrated into larger routine patterns of operation.
For several detailed analyses of how spreadsheets are overused and/or used inappropriately, with problematic results, see:
- Are Spreadsheets Running Your Business?
- Spreadsheet Addiction
- Databases versus spreadsheets - do you know where your data is?
- Excel to R
1.4 Custom Software Solutions
The ideal solution to all these types of problems is to create custom software applications, designed from the ground up to satisfy the specific data management needs of a given business. This typically leads to dramatically simplified, cleaner, multi-user capable, faster and less error prone user interfaces, and provides a much simpler path to adjusting core design and usage patterns as data management needs evolve. Custom apps provide focused solutions to specific work routines, with streamlined user interfaces that speed use, ease data input and output, and eliminate errors.
It's typically a trivial task for developers to produce software that effectively replaces spreadsheets. In many cases, creating a simple graphical user interface ("window", "form", etc.) which provides form validation and restricted access to fields of data, is all that's needed to manage daily data processing routines with greater facility, fewer mistakes, and better integration with a fully engineered system. In more complex cases, migrating information to a database system may be all that's required to enable multi-user access and to provide enhanced reporting abilities. In some cases, basic access to file system, network protocols, email, hardware, and other resources attached to a computer system are the only requirements for building useful apps which dramatically improve productivity in routine tasks. Searching for matching data patterns in files and performing conditional operations to send form emails to appropriate users, for example, is a simple utility task for a "developer", which can't be easily accomplished using mainstream office software. Simple, custom designed applications, created to manage specific tasks, and engineered to work together within a larger design, will almost always gracefully replace larger systems that have been patched together using pre-boxed solutions, spreadsheets, scripted interface and macro tools, data conversion routines, and other disparate components.
Custom software also adds to the equity value of a business, not just in terms of saved expenses and added intellectual property, but also because it clarifies and codifies the fundamental processes that make up the operating model which defines the business itself. Businesses which implement and assert repeatable models of operation are more easily expanded, scaled up, franchised, sold, etc. Simply understanding how, when, and why such custom apps can and should be built, enables an enormous competitive advantage.
1.5 The Benefits and Challenges of "Learning to Program" Custom Software
Given the challenges inherent in "learning to program", to engineer effective large scale, mission critical applications, the only apparent solution is to outline required specifications and then hire developers to create well designed software. The disadvantage of this arrangement, beyond it's initial expense, is that managers become tied to working with their chosen developer(s), and are limited by the contractor's schedule, creative/technical abilities, and understanding of the industry in which the software is used. It's not unusual for contracted developers to live apart from, and quite unaware of, the environment and conditions in which their creations are used. The realistic way in which operational stresses impact how their software is used may not always be fully communicated. Although the contractor solution can be effective, and is often the only choice available, it's critical for project managers to understand the options, benefits and drawbacks of every development choice available. A functional understanding of programming, even simple prototyping, helps to improve the development process and the outcome, even when managers (owners, workers, or other in-house personnel) write 0 lines of production code.
From quick utilities to large scale applications, and for all of the cases when a custom developed application is the most appropriate and productive solution, there is practical value in having mastered general "coding" skills. Not only is it useful to imagine and actually create utilities and applications, having a working knowledge of programming allows decision makers in businesses of all types to make informed choices about envisioning, evaluating, and commissioning software solutions to improve bottom line results. Understanding the benefits, drawbacks, extensibility limits, and infrastructure decisions required to create and implement any available technology solution is critical for effective decision making. It's of course important for developers and IT professionals to understand these topics, but when managers, owners, and users all share at least some fundamental knowledge, it becomes easier to communicate about specification details, and in fact about the very possibility of using software technology in smarter ways to improve productivity in the first place. Developers are far more likely than others to imagine simple software solutions to repeated problematic workflow patterns which reduce productivity and shrink bottom line results.
So "learning to program" may occasionally strike technically minded business people as a great idea. The problem is that "learning to program" with any real scope of useful skill is a deceptively difficult goal to achieve. There are an enormous variety of development tools available today. Picking a tool set and a learning path toward the goal of actually writing useful software in a variety of application domains can be even more time consuming and confusing than learning the required language(s). That's in fact a fundamental reason why "learning to program" is not a mainstream goal or expectation. The void between learning Excel and understanding general purpose programming has traditionally been considered too large a topic to be concisely understood, let alone applied to a variety of real world business use cases. Java and the C languages are powerful, popular, well supported, and capable of providing solutions to a full range of domain problems. Scripting languages such as Python, Ruby, and Lua, and IDE tools such as Visual Basic are powerful and easier to learn. But these languages and tool sets are still not designed for "non-programmers". The syntax of most languages is initially truly foreign, and the workflow is not immediately productive. Just the amount of time required to learn fundamental concepts needed to create a window with some text fields and buttons, and enough API understanding to do something actually useful with the entered data is well beyond the interest threshold of most professionals who entertain a fleeting interest in "learning to program". The enormous amount of effort required to "learn programming" will almost always draw too much time and energy away from more productive, income producing business efforts. That's why owners, managers, and workers typically never go beyond learning limited software tools such as Excel.
The problem is that there are just not any simple, self contained instructional packages that teach a full set of useful business programming skills at a level that attracts and maintains the interest of "non-programmers" who display initial curiosity. Potentially willing students are expected to read tens of thousands of pages about each programming paradigm, and spend years becoming intimately familiar with an enormous variety of language skills, development environments, APIs, IDEs and other coding tools, database systems, disparate work patterns, etc., before they can accomplish even a modest variety of practical programming goals safely and effectively. Learning to crunch a table of numbers and make an acceptable presentation with Excel is something that can be accomplished in a day. There are plenty of books and web sites available which get motivated users to that point, immediately. That is not the case for traditional programming languages.
1.6 A Uniquely Practical Tool
To find an ideal solution, it's essential to look beyond mainstream approaches and tools. The REBOL language and tool set is perfectly suited to business people who need to be productive with their time. REBOL was designed with that goal in mind, and it can be successfully learned and applied to that end, through a smoothly progressive learning curve, by "non-programmers" (professionals who fill a work schedule with activities other than writing code). No language is simpler to learn and use, and the path to understanding user interface creation, list and table data processing, web programming, mathematical analysis and reporting, parsing and data mining, graphic layout and presentation, and other essentially useful goals is more straight forward than with any other general purpose development tool. A strong understanding of how to create everything from quick and dirty utilities to full scale commercial applications can be achieved and put to use with even less effort than is required to perform advanced spreadsheet scripting. In REBOL, creating a program window with a button that emails the contents of a file to a group of people, is as simple as:
view layout [
button [
send [bob@site.com ed@site.com amy@site.com] read %file.txt
]
]
]
That's a functional, working program with a windowed user interface (i.e., one that uses buttons, fields, and other graphic controls, instead of text commands typed into a console).
The short script below downloads a Paypal account file from the web and calculates the sum of all values in the "Gross" transactions column (col #8). Writing this code takes less time than downloading the file with a browser, opening a spreadsheet program, importing the data, and summing the numbers with a formula. It also only needs to be written once, and executed any time the live data changes. Using a spreadsheet would require a complete download/import/run cycle for every change to the data source. Complex conditional and algorithmic evaluations, nearly impossible to accomplish with a spreadsheet, would require only a few lines of code added to this example:
sum: $0
foreach line at read/lines http://re-bol.com/Download.csv 2 [
sum: sum + to-money pick (parse/all line ",") 8
]
alert join "Total Gross Sales: " sum
This program creates a graphic bar chart from a list of numbers:
do %q-plot.r
view quick-plot [
600x400
bars [5 3 8 2 10 3 4 9 5 7]
]
Training employees to copy, paste, run, and even edit/extend the above code samples requires no more time than teaching them to use an email or spreadsheet application, and the installation/maintenance costs are $0.00. REBOL is a free, open source, 1/2 megabyte app that can be downloaded, installed, and run on any operating system in less than a minute. That's not true of any comparably powerful office application.
But the examples above just scratch the surface. REBOL has a striking ability to simplify difficult computing tasks of all types, with straightforward, extremely high level code dialects. No other development tool is as adept at making use of practical domain specific languages ("DSLs") which lower barriers to accomplishing the full gamut of useful programming tasks. Well designed language dialects virtually eliminate the traditional obstacles inherent in understanding core topics and acquiring new skills, to such a critically low point of simplicity that even "non-programmers" are immediately able to grasp and productively use clearly defined code patterns of all types. Creating graphic plots of number lists, building full screen presentations, creating visual forms to accept text input from users, parsing and performing math computations on columns of log data from web applications, searching and sorting values of all types, performing powerful conditional evaluations based on search results and value comparisons, and many much more complicated operations, all take just a few minutes to learn how to accomplish, using simple DSLs and native REBOL language features.
In addition to DSLs, REBOL uses a single universal code structure to store, manipulate, and transfer all data. Lists, tables, and even sizable databases of mixed text, code, and binary data are all created using one consistent "block" syntax. Like everything else in REBOL, block format is brutally simple, but it enables many powerful features for searching, sorting, comparing, dissecting, evaluating, storing, retrieving, transferring and otherwise manipulating information of all types. In many simple use cases, the need to even choose a database system, learn SQL, explore third parties libraries, and all the overhead related to managing such typical programming requirements, is simply bypassed. And because REBOL is one of the most portable languages in existence, these benefits are available and compatible on every operating system for which REBOL has been compiled (more than 40, and counting). The initial REBOL learning experience and all tooling is immediately and directly applicable to building desktop, server, web and mobile software. In REBOL, strings and other series data constructs all make use of the exact same functions as blocks, so the learning curve for performing every type of list and table data processing is greatly reduced. Common network protocols and data values are also natively accessed in REBOL, using the simplest possible syntax. Users can read and write data directly to/from databases, web servers, email accounts, and more, add/subtract time, date, tuple, and other values automatically, manipulate CSV, XML, HTML and other formats natively, display and apply effects to images and graphics, play sounds, etc., all without any complex formatting or any external library code. REBOL has a built in, powerful "parse" dialect which elegantly replaces the need for regular expressions when extracting data from both structured and unstructured sources.
And since REBOL is a tiny (about 1/2 a meg) multi-platform interpreter, it can be downloaded and used immediately, without installation, on all platforms as a lightweight file manager, text editor, calculator, database manager, email client, ftp client, news reader, image viewer/editor, OS shell, and more. You can employ it as a simple utility program with a familiar interface to common computing activities, on just about any computer, even if you're unfamiliar with the operating system. All REBOL applications, and the entire development system itself, is instantly transportable. You can even send complex REBOL scripts along with all the REBOL interpreters for Windows, Mac, and Linux as a tiny email attachment smaller that a single photograph. Complex scripts will operate and appear exactly the same visually to every user, using every type of computer, without any other required software installation dependencies, operating system or version updates, data conversion or reformatting work, etc. REBOL's size, portability, and free cost remove all limitations to transferring, computing, and presenting data in any environment, using any standard equipment.
The list of such practical features goes on and on, but REBOL is not built from shortsighted gimmicks. It is a deep and powerful tool that encompasses solutions to a diverse set of problems, using a simple unified approach. Dialects enable intuitively human access - via simple language constructs - to powerful layers of technology. Because so many deep, varied layers of practical capability are all built into REBOL, and because all those elements interact natively, the learning curve required to get real work done is much easier, and more power over a broader scope is enabled, than in other development environments.
1.7 The Goal is to Improve Overall PRODUCTIVITY and CAPABILITY
Empowering a versatile approach to solving common data management problems found across a variety of domains of business operations, using a single tool designed to be simple enough for "average computer users" to learn, is what this tutorial aims to accomplish. The end result of studying this text is to increase productivity and capability in ways that are otherwise impossible to achieve. Although it might be possible to achieve this goal with a smart curriculum based on other mainstream development tools, in this author's experience, REBOL is the best fit for the intended audience ("non-programmers").
In order for business programming to be productive, the time invested in studying and writing code must be less than the time and money saved by implemented software solutions. This text is intended to cover the entire scope of learning, with no additional required resources. It begins with an essential absolute beginner tutorial, and progresses through numerous case studies demonstrating how real world applications were developed to solve problems in a variety of domains. By the end, the reader will have a solid understanding of all the code required to build powerful multi-platform desktop applications, server programs, web scripts and mobile apps that solve the overwhelming majority of data management problems encountered in common business scenarios (not just concepts, but actual working code). More than 100 complete working application examples will be explored in depth, and absolutely no previous programming experience is required to get started. Those applications are free to use, modify, and combine for your own purposes. Once complete, the benefits and drawbacks of learning other development tools will be much easier to understand, but in many cases, those traditional tools may never be needed by the "non-programmers" who are attracted to this text.
At very least, studying this text will enable the ability to use a tool that's far more versatile than spreadsheets and other familiar office software. More than likely, in any business that involves managing the activities of even a few employees, the skill of computer programming will find repeated practical application. Even if that skill is not regularly employed, the insight that comes from understanding how to imagine new software tools and design program specifications and algorithms to solve problems, is practical for anyone who intends to engineer improved business processes.
The combination of an appropriately focused curriculum and a uniquely approachable tool set, takes the task of "learning to program" for business from the realm of virtually impossible to quite approachable, for anyone who wants to put in the time and intellectual effort. Learning to envision and then actually create usable, safe, practical software applications is not an easy endeavor, but it is doable and can be tremendously rewarding ... and it provides true long term potential to increase productivity and improve bottom line profits in any business.
|