• Activity
  • Votes
  • Comments
  • New
  • All activity
  • Showing only topics with the tag "programming". Back to normal view
    1. Looking for programming/software book recommendations

      I'm not looking to gain any practical skills from these recommendations (ex: not "Clean Code", "The Pragmatic Programmer"). Last year I read through the two books in Fabien Sanglard's Game Engine...

      I'm not looking to gain any practical skills from these recommendations (ex: not "Clean Code", "The Pragmatic Programmer"). Last year I read through the two books in Fabien Sanglard's Game Engine Black Book series and would love to get my hands on more books like them. Books that focus on history, arcane details and secrets once thought lost to time. Sadly it appears I've already worked through Sanglard's entire bibliography. But I'm sure there's more stuff out there like it.

      10 votes
    2. What are some examples of good administrative/management UI design to use for inspiration?

      tl;dr What applications (web or desktop) have you seen that have excellent, productive user interfaces that prioritize getting shit done? I am currently developing a moderately complex web...

      tl;dr What applications (web or desktop) have you seen that have excellent, productive user interfaces that prioritize getting shit done?

      I am currently developing a moderately complex web application with a management interface that will be used by non-technical users. It also has a separate interface for technicians to see their tasks and submit reports, but I'm pretty happy with how that's coming together. I have a pretty good idea of how I want to display data in terms of what kind of "widgets" I could use. For example, a calendar view with daily, weekly, and monthly view modes. What I'm looking for inspiration with are the finer details, like filtering data, navigation, data hierarchy. I want to find things I hadn't even considered and aren't part of the typical "flat web UI toolkit" playbook.

      I'd love to steal small ideas from a forgotten tool built for Windows 95, or maybe those paradigms are best left in the past—I don't know. Personally, I find most flat UI applications are almost useless in terms of discoverability, productivity, and general ease of use. Something like the Azure dashboard is what I would like to avoid building.

      I'm also trying to keep my front end stack pretty lean by using Vue.js and rolling my own components based on accessible and keyboard navigable HTML components.

      9 votes
    3. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      11 votes
    4. A brief look at programming paradigms

      Overview If you've spent any significant amount of time programming, then you've probably heard discussions about imperative, functional, and declarative programming. These discussions are often...

      Overview

      If you've spent any significant amount of time programming, then you've probably heard discussions about imperative, functional, and declarative programming. These discussions are often mired in technical knowledge and require a fair amount of intuition when trying to grasp the differences between the examples placed in front of us. These different programming styles, usually called programming "paradigms", are discussed as if they exist within a vacuum with complete and total isolation from one another. This only furthers the confusion and frustration among newer programmers especially, which runs counter to the goal of instructing them.

      In this post I'll be taking a look at the oft-neglected intersections where these paradigms meet with the hope that the differences between them will be better understood by reframing our existing knowledge of programming basics.

      Note: I'll be using PHP for my code examples and will try to provide comments when necessary to point out language quirks.


      Understanding Fundamentals is Imperative

      Let's start by first reviewing the most basic, fundamental programming paradigm: imperative programming. The term is a bit strange, but the important thing to understand about it is that imperative programming refers to writing software as a series of instructions where you tell the computer how to solve a specific task. For example, if we need to add together a bunch of numbers inside of an array, we might write code that looks like this:

      $numbers = [ 8, 31, 5, 4, 20, 78, 52, 18, 96, 27 ];
      $sum = 0;
      foreach($numbers as $number) {
          $sum += $number;
      }
      

      This is a pretty typical example that you've probably encountered in some form or another at some point in your programming studies or career--iterate over an array one element at a time from the first element to the last and add the current element to some accumulating variable that starts at 0. The kind of loop you use may differ, but the general format of the solution looks the same. This is very similar to the way the computer itself performs the task, so the code here is just a relatively human-friendly version of the actual steps the computer performs. This is the essence of imperative programming, the basic building blocks of everything you learn early on.


      Abstract Concepts

      As the software we write gets larger and more complex, we then tend to rely on "abstractions" to simplify our code and make it easier to understand, reuse, and maintain. For example, if we've written a program that adds arrays of numbers together, then we probably aren't doing that in only one place. Maybe we've written a tool that generates reports on large data sets, such as calculating the total number of sales for a particular quarter, gross profit, net profit, remaining inventory, and any number of other important business-related metrics. Summing numbers could be so common that you use it in 30 different places, so to avoid having to maintain 30 separate instances of our number adding code from above, we define a function:

      function sum($numbers) {
          $sum = 0;
          foreach($numbers as $number) {
              $sum += $number;
          }
      
          return $sum;
      }
      

      We do this so frequently in our code that it becomes second nature. We attach so many names and terms to it, too: DRY, abstraction layers, code reuse, separation of concerns, etc. But one thing experienced programmers learn is to write their functions and object and interface methods in such a way that anyone who uses them doesn't need to care about the underlying implementation details, and instead only need to worry about the method name, expected arguments (if any), expected return type (if any), and expected behavior. In other words, they don't need to understand how the function or method completes the intended action, they only need to declare what action they want performed.


      A Declaration of Understanding

      Anyone who has looked into the concept of the declarative programming paradigm should find those last words familiar: "they don't need to understand how the function or method completes the intended action, they only need to declare what action they want performed". This is the oft-touted explanation of what declarative programming is, the difference between detailing "how" and declaring "what", and I believe that it's this great similarity that causes imperative and declarative programming to become heavily entwined in a programmer's mind and makes it difficult to understand. Take this common example that authors tend to use to try to detail the difference between declarative and imperative programming:

      // imperative
      function sum($numbers) {
          $sum = 0;
          foreach($numbers as $number) {
              $sum += 0;
          }
      
          return $sum;
      }
      
      // declarative
      function sum($numbers) {
          return array_reduce($numbers, fn($x, $y) => $x + $y, 0);
      }
      

      The authors will go on to state that in the imperative example, you tell the computer how to sum the numbers, whereas in the declarative example you don't tell the computer how to do it since you don't know anything about the reduce implementation, but intuitively it still feels as if you're telling the computer how to perform its task--you're still defining a function and deciding what its underlying implementation details are, i.e. the steps it needs to take to perform the task, even if its details are abstracted away behind function or method calls that could have varying implementation details of their own. So how the hell is this any different from defining functions like we do in imperative programming?

      The answer is simple: it isn't. We've used so many names and terms to describe functions and methods in our ordinary imperative programming, but the truth is that a well-defined function or method serves as a declarative interface to an imperative implementation. Put differently, declarative programming is defining and utilizing simple interfaces that describe what you want accomplished while the underlying implementation details are inevitably written using imperative code.


      Functional Differences

      Now we can finally tackle one of the biggest trends in programming right now: the functional programming paradigm. But to understand this paradigm, it's important to understand what a "function" is... from a mathematical perspective.

      Yes, I know, math tends to be a enthusiasm sink for many, but don't worry, we're not actually going to be doing math. We only need to understand how math treats functions. Specifically, math functions usually look something like f(x) = {insert expression here}, which is loosely equivalent to the following code:

      function f($x) {
          return {insert expression here};
      }
      

      The important thing to note about functions in math is that you can run them a theoretically infinite number of times on the same input x and still get the same return result. Unlike in a lot of the programs we can write, math functions don't produce side effects. Files aren't written to or destroyed, database entries aren't deleted, some global counter somewhere isn't incremented, and your x doesn't suddenly change. The idea behind functional programming is to embody some of that nature of mathematical functions because they're predictable and always reproducible, and therefore simple to test as well. For example, take the following:

      // not functional
      function increment(&$x) { // pass by reference--$x will be modified outside of this function!
          $x++;
      }
      
      $x = 1;
      increment($x);
      increment($x);
      increment($x);
      
      // functional
      function increment($x) { // pass by value--$x will NOT be modified outside of this function!
          return $x + 1;
      }
      
      $x = 1;
      $y = increment($x);
      $y = increment($x);
      $y = increment($x);
      

      Note that the first example will change the value of $x on each call, meaning each subsequent call of increment($x) produces a different result. Meanwhile the second example doesn't change $x and so the return value of increment($x) is always the same. This may seem like a silly example, but in larger, more complex software this can be significant. So now that we have an understanding of functions from a mathematical perspective, we have everything we need to actually understand what functional programming is.

      Functional programming is a subset of declarative programming. Just like in declarative programming, you use simple interfaces to tell the program what you want to do rather than how to do it. But unlike declarative programming as a whole, functional programming imposes some additional restrictions on what you should and shouldn't do:

      • You should encapsulate behavior in pure functions, which always give a consistent output for a given input and don't have side effects.

      • You should write functions in such a way that you can compose them together, allowing you to combine and chain behavior to produce new functions or use the output of one as the input for another.

      • You should avoid side effects as much as possible.

      • You should avoid mutable state (e.g. changing the values in a variable).

      • You should avoid sharing state between components.

      These restrictions would require an entirely separate post on their own to properly cover and have been covered so many times in so many ways by others elsewhere that it would be superfluous for me to try to add anything more. It's important to note, however, that these restrictions are imposed because they provide some key benefits. By avoiding side effects and by avoiding mutable and shared states, the code you write becomes more predictable and tracing the behavior of an algorithm becomes far simpler. By writing pure, composable functions, you create reusable building blocks that can be strung together in virtually any configuration with predictable results. This makes writing, reading, maintaining, and debugging code easier and less error-prone.

      That said, I feel that it's important to note that in the real world when writing practical software that users can interact with, it's simply not possible to completely avoid side effects or mutable state. The very act of creating and updating database entries is itself an act of mutating state, which runs contrary to functional programming principles and is essential for many important software projects. But even if you can't adhere strictly to functional programming principles, it's possible to benefit significantly from being aware of them and integrating them into your own software development strategies.

      Let's consider a more practical example to illustrate this. Imagine that you've built a social media website and you're trying to test a push notification system that will be triggered when your user receives a new message. Now imagine your code and unit tests look something like this:

      function sendNotification(&$message) { // pass by reference--$message will be modified outside of this function!
          $notification_system = new NotificationSystem();
          if(!$message['sent_push_notification']) {
              $notification_system->sendPushNotification($message);
              $message['sent_push_notification'] = true;
          }
      }
      
      function testSendNotification() {
          $message = [
              'user_id'=>'{some_id}',
              'contents'=>'Hi!',
              'sent_push_notification'=>false
          ];
      
          sendNotification($message);
          sendNotification($message);
      }
      

      At a quick glance you probably wouldn't be aware of why the second message didn't send, but the fact that our sendNotification() function mutates the state of the data provided to it is the culprit. This is code that doesn't adhere to functional programming principles since the data provided to it is mutated. As a result, running the function multiple times on the same variable doesn't result in the same behavior as the first call. If we wanted to work around this without adhering to functional programming principles then we would need to manually set $message['sent_push_notification'] = false; between function calls, which makes our unit tests potentially more error-prone. Alternatively we can make a simple change to adhere better to those functional principles:

      function sendNotification($message) { // pass by value--$message will NOT be modified outside of this function!
          $notification_system = new NotificationSystem();
          if(!$message['sent_push_notification']) {
              $notification_system->sendPushNotification($message);
              $message['sent_push_notification'] = true;
          }
      
          return $message;
      }
      
      function testSendNotification() {
          $message = [
              'user_id'=>'{some_id}',
              'contents'=>'Hi!',
              'sent_push_notification'=>false
          ];
      
          sendNotification($message);
          sendNotification($message);
      }
      

      Now both notifications will be sent out, which is what we would intuitively expect. You should also notice that the above is also a blend of imperative, declarative, and functional programming. Our function definitions have imperative code, our sendNotification() function adheres to the functional programming principle of avoiding mutable state (well, mostly), and our NotificationSystem object provides a declarative interface for sending a push notification for a message.


      Final Thoughts

      By viewing these three paradigms not as completely separate concepts but as layers on top of one another, where functional programming is a type of declarative programming which is implemented using imperative programming, we can stop being confused by their similarities and instead find clarification in them. By understanding that imperative programming is the backbone of everything, that declarative programming is just simplifying that backbone with simple interfaces, and that functional programming is simply adding some additional guidelines and restrictions to the way you write code to make it more consistent, reusable, and predictable, we can start to see that we're not choosing one programming paradigm over another, but instead choosing how much consideration we place on the design of the programs we write. Except in purely functional languages, functional programming isn't some alien concept distinct from imperative or declarative programming, but is instead a natural evolution of the two.

      There are a lot of details I've glossed over here. Each of these programming paradigms is far too detailed to include a proper analysis in an already lengthy post that tries to separate them from each other and clarify their differences. Blog articles exist in a thousand different places that can do each one far more justice than I can, and programming languages exist that completely cut imperative programming out of the picture. But for your average programmer slinging JavaScript, C, Rust, PHP, or what have you, I hope that this serves as a crucial starting pointing to understanding just what in the hell these functional programming enthusiasts are on about.

      25 votes
    5. What do you think of LeetCode? Did anyone of you succeed thanks to it?

      I've come across this website recently, and I'm genuinely wondering if it's really that useful for passing interviews. For example, I think it can not replace a solid background in algorithms/data...

      I've come across this website recently, and I'm genuinely wondering if it's really that useful for passing interviews.

      For example, I think it can not replace a solid background in algorithms/data structures and maybe CS courses in general.

      7 votes
    6. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      8 votes
    7. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      5 votes
    8. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      9 votes
    9. Should I give up from programming?

      This is gonna be kinda of a personal mess. My background is in film. In Bahia, Brazil. I understand this is a very personal question with numerous factors to take in, some on which I'll absolutely...

      This is gonna be kinda of a personal mess.

      My background is in film. In Bahia, Brazil.

      I understand this is a very personal question with numerous factors to take in, some on which I'll absolutely not be able to convey.

      I'm not looking for any definitive life advice because I know that's impossible. I just wanna hear perspectives from some smart people that might help me understand my situation. I've recently been through a (kind of a) life and death situation. I'd be dead or with severe neurological trauma without a helmet.

      This made me rethink a lot of stuff about my goals and my life in general. I feel I can confide on Tildes, you people are usually caring and smart and awesome. I'm also a bit emotional, so please be gentle. Spending 24 hours on a hospital bed contemplating death and incapacitation kind does that too with you.

      I won't change many details because fuck it, I don't thank there are a lot of people in the world wanting to dox me. And Google already knows everything about me anyway.

      I have two very serious psychiatric diagnostics that impart my life in serious ways: bipolar disorder (type II, thankfully) and ADHD. I'm also suspected to be on the autism spectrum but I don't have the means to achieve this diagnostic. It would be useful anyway. These conditions seriously impact my ability to sustain a job for long periods and I have a hard time working with teams bigger than three (sometimes not even than).

      I live for free in my mother's conformable apartment, while I she actually spends most of the time on another continent. It's a pretty good deal. But I wanted to be independent.

      About two years ago I decided that work in film (my original major) would never provide me the financial independence I needed. Working in film means traveling a lot, infrequent hours, absurd exploration (its common to sleep 4 hours a day), and rampant drug use. I love film and do have a talent for it, but the environment is simply not conducive to my mental health.

      Of course, now I realize that computer science may also not be conducive to mental health issues at all. The thing is, really like. When I'm lisping, the real illogical world becames more bearable, and I feel in a wonderland of logic, reason, and calming predictabilidade. This doesn't happen as much with other languages such as Python. I also suck at it. So much that's not even funny. I'm addicted to Linux, Emacs, and the command line, but that's kinda it. I became a Vim/Emacs semi specialist. I don't see myself ever doing anything complex. It this my mind, really!

      I've been trying to program for almost 3 years and, beside my super awesome machine, I have nothing to show for myself. I try focusing on using things like Java or Python but I always get sidetracked trying to do some cool shit on Emacs.

      Sometimes I wonder if I should just assume that I won't be able to concentrate on anything else and just learn Emacs Lisp for real. It's frowned upon by a lot of people, but Emacs is a wonderful learning environment and at least I would be doing something. Maybe an interesting package that some people would like to use.

      Right now my choice seems to be between failing to study things that make me miserable (like OOP), but have clear professional possibilities, or focusing on something I actually like that might make a better programmer in the future.

      An important detail: I'm 38 years old and unemployed. My region is not very economically active in that area but I'm afraid to leave it because then I would lose my support network. And the mere notion of being with other people on a daily bases causes me panic attacks.

      And, as a reminder, studying programming with bipolar disorder ADHD is hard as fuck. My ADHD is so severe that I constantly forget what I'm doing withing seconds. That's probably why I like Lisp, which is more regular than other languages and I can get things more easily from context.

      On the other hand, I'm super charming (and not at all modest hahaha) and interesting at parties because my scattered interests make it possible to contribute meaningfully (and sometimes witty) to pretty much any conversation. My success with women is indirectly proportional to may financial troubles.

      Anyway, I know I said this was not about advice, but I kinda lied: what's your advice? Should I keep trying on something I'm not really talented at just because I like it (and it may bring financial rewards in the future).

      Or should I just give up and, try my hand at some shorts and even a novel? (I'm currently on a severe writer's block though, but I do have some talent for it).

      Maybe I could work from home, be some kind of sysadmin (in which case, what would be the quickest and cheapest way to do so?). I absolutely don't wanna create huge complex products, but managing thinks remotely would be awesome.

      I also love philosophy and logic, and, if became suddenly rich, that's what I'd do for the rest of my life. Oh, well.

      12 votes
    10. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      4 votes
    11. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      6 votes
    12. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      9 votes
    13. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      6 votes
    14. RoguelikeDev Does The Complete Roguelike Tutorial Starting June 16th 2020

      Link to the post: https://www.reddit.com/r/roguelikedev/comments/grccvt/roguelikedev_does_the_complete_roguelike_tutorial/ Text of the post copied below, to save you from having to wait for Reddit...

      Link to the post:

      Text of the post copied below, to save you from having to wait for Reddit to load:

      Roguelikedev Does The Complete Roguelike Tutorial is back again this year. It will start in three weeks on Tuesday June 16th. The goal is the same this year - to give roguelike devs the encouragement to start creating a roguelike and to carry through to the end.

      Like last year, we'll be following http://rogueliketutorials.com/tutorials/tcod/. The tutorial is written for Python+libtcod but, If you want to tag along using a different language or library you are encouraged to join as well with the expectation that you'll be blazing your own trail.

      The series will follow a once-a-week cadence. Each week a discussion post will link to that week's Complete Roguelike Tutorial sections as well as relevant FAQ Fridays posts. The discussion will be a way to work out any problems, brainstorm ideas, share progress and any tangential chatting.

      If you like, the Roguelike(dev) discord's #roguelikedev-help channel is a great place to hangout and get tutorial help in a more interactive setting.

      Schedule Summary

      Week 1- Tues June 16th

      Parts 0 & 1

      Week 2- Tues June 23th

      Parts 2 & 3

      Week 3 - Tues June 30th

      Parts 4 & 5

      Week 4 - Tues July 7th

      Parts 6 & 7

      Week 5 - Tues July 14th

      Parts 8 & 9

      Week 6 - Tues July 21th

      Parts 10 & 11

      Week 8 - Tues July 28th

      Share you game / Conclusion

      I've followed along with these before and it's a pretty fun experience. Even if you have made a roguelike before, you will still learn a lot of new things by keeping up with and reading the comments and code posted by others as the event goes on.

      For anyone wanting to dip their toes into basic game development, this a great, hand-holding way to do that.

      5 votes
    15. Fortnightly Programming Q&A Thread

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads. Don't forget to format your code using the triple...

      General Programming Q&A thread! Ask any questions about programming, answer the questions of other users, or post suggestions for future threads.

      Don't forget to format your code using the triple backticks or tildes:

      Here is my schema:
      
      ```sql
      CREATE TABLE article_to_warehouse (
        article_id   INTEGER
      , warehouse_id INTEGER
      )
      ;
      ```
      
      How do I add a `UNIQUE` constraint?
      
      8 votes
    16. How do you design a Proof of Concept project for a new dev/test tool?

      Input wanted for an article. Let's say that your company is considering the purchase of an expensive new application to help in the company's software development. The demo looks great, and the...

      Input wanted for an article.

      Let's say that your company is considering the purchase of an expensive new application to help in the company's software development. The demo looks great, and the feature list makes it sound perfect for your needs. So your Management arranges for a proof of concept license to find out if the software is worth the hefty investment. The boss comes to you to ask you to be in charge of the PoC project.

      I'm aiming to write an article to help developers, devops, and testers determine if a given vendor's application meets the company's needs. The only assumption I'm making is that the software is expensive; if it's cheap, the easy answer is, "Buy a copy for a small team and see what they think." And I'm thinking in terms of development software rather than enterprise tools (e.g. cloud-based backup) though I suspect many of the practices are similar.

      Aside: Note that this project is beyond "Decide if we need such a thing." In this scenario, everyone agrees that purchasing a tool is a good idea, and they agree on the baseline requirements. The issue is whether this is the right software for the job.

      So, how do you go about it? I'm sure that it's more than "Get a copy and poke at it randomly." How did (or would) you go about designing a PoC project? If you've been involved in such a project in the past (particularly if the purchase wasn't ideal), what advice could someone have given you to help you make a better choice? I want to create a useful guide that applies to any "enterprise-class" purchase.

      For example: Do you recommend that the PoC period be based on time (N months) or workload (N transactions)? How do you decide who should be on the PoC team? What's involved in putting together a comprehensive list of requirements (e.g. integrates with OurFavoredDatabase, meets performance goals of X), creating a test suite that exercises what the software dev product does, and evaluating the results? ...and what am I not thinking of, that I should?

      7 votes