8 votes

Project-Specific Programming Suggestions for Newbie

16 comments

  1. [3]
    stu2b50
    Link
    First of all, looking through this I think you will find that your task is vastly more complicated than you are currently estimating. Even for an experienced developer, for a somewhat polished...

    First of all, looking through this I think you will find that your task is vastly more complicated than you are currently estimating. Even for an experienced developer, for a somewhat polished version I would expect no less than several months of work.

    For someone with no programming experience, going from zero to making GUIs is quite a jump, even if the business logic is simple.

    If this is your eventual goal, I would suggest starting with JS. Otherwise, Python is always nice, however GUI library support is not there, nor is good deployment.

    So if this is just a hobby, then get started with React/Vue and have fun. If not, then seriously get a programmer, but expect to pay quite a bit, and for it to take quite a bit.

    11 votes
    1. Liru
      Link Parent
      Yeah, mostly agree. Depending on the level of implementation and features needed, I could easily see the calendar talking up most of the development time. QFT. I recently made a small application...

      Yeah, mostly agree. Depending on the level of implementation and features needed, I could easily see the calendar talking up most of the development time.

      ...going from zero to making GUIs is quite a jump, even if the business logic is simple.

      QFT. I recently made a small application for my cousin because I wanted to learn how to make GUI programs. It came out to ~300 lines of various code, all to wrap around what is essentially a function that would take any semi-skilled programmer less than five lines to write in most languages. On top of that, there are a lot more complicated concepts to learn that are GUI-specific.

      4 votes
    2. insegnamante
      Link Parent
      Man, that was quick! Thanks, it is an ongoing hobby. I've been thinking about it for years, and watching the available software with nothing but frustration. I'll devote a little time to it every...

      Man, that was quick! Thanks, it is an ongoing hobby. I've been thinking about it for years, and watching the available software with nothing but frustration. I'll devote a little time to it every day and see what happens.

      JS=Javascipt, I presume? Ah, Googling React/Vue shows that yes, that's Javascript. Many thanks!

      3 votes
  2. [5]
    insegnamante
    Link
    I would like some suggestions as to how to get started programming. I have a specific project in mind. I am a solo attorney. The case/firm/client management software that is available for law...

    I would like some suggestions as to how to get started programming. I have a specific project in mind. I am a solo attorney. The case/firm/client management software that is available for law firms is far more complex than a solo needs. It's also rather expensive, especially when you consider how much of the software a solo actually uses. I sketched out what I want and would use. See link. The software would live on the lawyer's computer (and phone, eventually), not in the cloud. The data could be (should be) stored in the cloud.

    What programming language should I learn? Should I take a course in programming "theory" first, or just start drafting lines of code?

    Any advice is welcome, even if it's along the lines of "this is a terrible idea" or "get a programmer".

    5 votes
    1. [4]
      3d12
      Link Parent
      It sounds like you don't have any prior programming experience. If that's the case, I apologize if any of this advice comes off as assumptive or dismissive. As far as a first project, this is a...

      It sounds like you don't have any prior programming experience. If that's the case, I apologize if any of this advice comes off as assumptive or dismissive.

      As far as a first project, this is a waaaaaaaay bigger scope than you think. Especially for a standalone application (like you said, where the software lives on the computer, not running in a browser on the cloud) you're talking about learning quite a few intricacies of OS-level interface.

      Just as a small example, let's talk about storing your clients' data. I'm not even talking about appointments, billing, previous scheduled sessions, etc -- let's just look at each client like an entry in a cell phone "contacts" list; name, address, phone, A/R account. You can't just persist all of these in memory, you need a stateful way to store them, otherwise all your data will be lost when you exit the program, and this is typically an undesirable behavior. So, where do we store this data when the program exits? Write it out to a file? Send it over the network to a cloud storage medium? How about calling up a local database and syncing to that? Note how just in one small abstraction, we're already potentially reaching into other software/technologies, and that's without getting into regulations about privacy safeguarding and encryption that will be required for storing such sensitive data.

      Of course, there are "gotchas" to each of these courses of action. This is probably what you think of when you think of "programming theory" as a concept -- knowing things like flushing caches to disk on program exit, and how to serialize/deserialize the data into efficiently-stored files or network data streams. These are the things that can be learned best by getting burned by them. And -- listen carefully, because this next bit is important -- you generally do not want to get burned by these things in production-level software.

      That said, if you are prepared to put in the legwork and learn the technology of your choice, grind out the codebase over years (yes, years) of work, and make sure your program is brutally and ruggedly tested, then you may come out with some reward for your effort. If that's the path you choose, I wish you luck and would recommend Python or Java for building such a standalone desktop app. (Python if you're a total newbie, Java if you want better compatibility for potentially monetizing your program to others when you're done)

      8 votes
      1. [3]
        insegnamante
        Link Parent
        You are right, I have no previous programming experience. All the replies here are helping me realize that this is a bigger project than I thought, mainly because of the things I don't know that I...

        You are right, I have no previous programming experience. All the replies here are helping me realize that this is a bigger project than I thought, mainly because of the things I don't know that I don't know. I've thought for a long time that I should learn something about programming, though, and I'm going to get started. Since I'm a total newbie, I'll start with Python.

        2 votes
        1. [2]
          3d12
          Link Parent
          Those unknown unknowns will get you every time. :) I'm glad you came and asked this question, it shows good initiative and drive in doing so. As far as Python goes, I used Zed Shaw's "learn python...

          Those unknown unknowns will get you every time. :) I'm glad you came and asked this question, it shows good initiative and drive in doing so.

          As far as Python goes, I used Zed Shaw's "learn python the hard way" which (despite the drama and extreme opinions about the author you'll find online) I thought was a good resource. It has since been monetized though, and I don't know offhand of any free python courses out there, though I'm sure they exist.

          You'll want to look into the "tkinter" module for Python, it's a package that handles GUI (the point-and-click part of the program, like creating windows, buttons, views, etc) and comes bundled with Python. There are, of course, other GUI libraries, but the ones that are bundled with the language as part of the "standard" library will usually be the best documented and supported.

          Best of luck! And keep asking questions!

          2 votes
          1. insegnamante
            Link Parent
            Thanks for the tkinter suggestion. I'll do that. I've found some YouTube videos about programming a timer in Python and watched them. Already learned that there are "modules" in Python (yep, I'm a...

            Thanks for the tkinter suggestion. I'll do that. I've found some YouTube videos about programming a timer in Python and watched them. Already learned that there are "modules" in Python (yep, I'm a complete newbie) and how to create a timer, more or less. I mean, really, it's all new to me. I knew a little about HTML before making this post, but I've never done anything more than roll out a site using WordPress.

  3. [6]
    vord
    Link
    I love your mockups! My initial thought is if done right, could definitely have a broad market outside purely solo attorneys... basically everyone who bills by the hour could leverage a decent...

    I love your mockups! My initial thought is if done right, could definitely have a broad market outside purely solo attorneys... basically everyone who bills by the hour could leverage a decent subset of these features.

    Sibling poster is spot on though...this is potentially months or years of development time to get to a reliable/polished/secure enough state to use as a daily driver.

    That said, I remember hearing that the best software comes from a developer scratching their own itch. You also don't have to make the whole thing at once. Break it into sub components, and make sure they are modular so you can tie them together as they are finished.

    If you don't mind, I'm totally going to steal some of the ideas for a hobby project of my own. I'll make sure to attribute and link you if it ever materializes.

    4 votes
    1. [5]
      insegnamante
      Link Parent
      Have at it. If my ideas improve someone else's ideas, I'm happy. I wouldn't mind knowing about how it affects your project in the end. Thanks. So what is it that makes this a larger project than I...

      Have at it. If my ideas improve someone else's ideas, I'm happy. I wouldn't mind knowing about how it affects your project in the end.

      Thanks. So what is it that makes this a larger project than I think?

      Certainly can't call myself a developer. Dabbled with HTML back when it was new, that's really all I can say I know about programming. But I do have the itch that needs scratching.

      First sub would be timing. Ugh. Nobody does it well. And it's the focus of so many law firms' daily process.

      4 votes
      1. [4]
        vord
        Link Parent
        I'm not much of a developer, but I do have some thoughts about difficulty: If information is remotely sensitive, you're going to want any storage or transmission of data to be encrypted. Adds a...

        I'm not much of a developer, but I do have some thoughts about difficulty:

        • If information is remotely sensitive, you're going to want any storage or transmission of data to be encrypted. Adds a fair bit of complexity, but is almost mandatory... starting with a secure base is far easier than re-designing for security afterwards.
        • Online vs offline capabilities. One or the other is easier than both, but each carries trade-offs. Offline-only is easier to implement for a single device, but synchronization can be a challenge for multiple devices. Online only is simpler to implement for multi-device, but if you lose internet access your app is unusable. There are some great options for a hybrid (see next point) approach, but they have a learning curve of their own.
        • Creating and testing backups of your data. This is one of the most important tasks of my day job. Creating backups isn't good enough....you must also test their restoration periodically to insure that the restoration methods are robust and your backups are valid. Need to evaluate amount of data you're willing to lose in a failure, and this may influence your choice of storage method.
        • Choice of storage mechanism based on the above decisions. There's a bunch of offline-first databases that support syncing to an online source. You'll have to research the options and learn to administer and develop for, which is an additional learning curve. My personal recommendation there would probably be a PouchDB/CouchDB combo.
        • GUI implementation can be tricky. I personally don't do much of it, but for one project at work I wrote a fairly simple Python GUI front-end for SQL databases, and learning how to use the GUI framework and debugging/refining it was easily 90% of the time spent. Web platforms are probably a bit simpler, but still not trivial.

        Funny you mention the timing aspect being most important. That's precisely my project's goal as well....I've not found an open/free timekeeping application that is both powerful and simple to use.

        As someone who despises the over-use of spreadsheets in business, especially as part of a critical business processes.... prototyping in spreadsheets has been substantially helpful. Spreadsheets are quick to modify, easy to add data, and have some decent graphing and reporting tools built-in. Google sheets or LibreOffice costs nothing, and almost every employer buys Excel as well. I wouldn't want to use them long term, but a few weeks for me to figure out what's lacking in a spreadsheet prototype which took less than an hour to cobble together has helped me hone in on what my specific needs are.

        2 votes
        1. [3]
          insegnamante
          Link Parent
          So let's see if I understand what you're saying. First I should focus on securely transmitting data as security is easier to build in from the beginning than to add in later. Then I should...

          So let's see if I understand what you're saying. First I should focus on securely transmitting data as security is easier to build in from the beginning than to add in later. Then I should figuring out synchronization of devices. Then I should figure out how to make sure my data backup solution is working. After that I can actually start building an app of some sort. It also sounds like you recommend prototyping in a spreadsheet at first. Am I getting this about right?

          1 vote
          1. [2]
            vord
            Link Parent
            Not meant to be an instruction manual, they were merely the first items that came to mind regarding some of the more complex aspects. The recommendation I made to help with that is a combo of...

            Not meant to be an instruction manual, they were merely the first items that came to mind regarding some of the more complex aspects.

            The recommendation I made to help with that is a combo of CouchDB and PouchDB. When properly setup, they solve the first three bullet points nicely.

            You'll want to look into doing HTTPS setup, and that will take care of secure transmission. Backing up CouchDB is fairly easy. Encrypting at rest is less critical, but if you're storing sensitive information is a very good idea.

            As far as prototyping in a spreadsheet...it works for me when doing data-driven work. If your application involves a lot of "take X, multiply by Y, add Z," that is a prime example of something spreadsheets do really well.

            1 vote
            1. insegnamante
              Link Parent
              Thank you. I'll look into CouchDB and PouchDB. I think that the spreadsheet suggestion is something I'll use. Getting to know Excel a little better is never a bad thing, and figuring out how the...

              Thank you. I'll look into CouchDB and PouchDB.

              I think that the spreadsheet suggestion is something I'll use. Getting to know Excel a little better is never a bad thing, and figuring out how the equations will work before putting them into a program seems like a smart thing.

  4. [2]
    joplin
    Link
    Let me start by saying that I think it's great you want to learn to do this, and I think you could make something really useful for yourself and possibly others. I think you could get the basics...

    Let me start by saying that I think it's great you want to learn to do this, and I think you could make something really useful for yourself and possibly others. I think you could get the basics done in a short amount of time if you work on it regularly. Even an hour a day could probably get you something useful in a month. Don't give up just because it looks daunting. I'd also like to say that when it comes to software I'm a nitpicky prick. Don't take anything I say in this thread personally. I'm a software developer at a well-known company and I hate everything I use on my computer because it doesn't work quite as well as I know it could. With that out of the way...

    To start, It looks like your idea is to drop the user right into their main task. That's good! You should definitely do that. Users want to sit down and get to work, and if you understand the workflow of an attorney (which I'm guessing you do), you'll want to make the software present them with whatever they were last working on (unless they manually closed it), and let them get back to working on it, or present them with whatever they're likely to need next.

    The first thing I thought when seeing your current screenshot is that the user interface is somewhat garish. I don't know whether this is due to the tool you used to generate it, or not, but the font is entirely inappropriate for business software.

    The second thing I noticed is that the user interface uses lots of custom elements. The list on the left of "Schedule," "Clients," and "Billing" looks really useful, but they shouldn't be huge buttons. And programming them to be round buttons with coloring that meshes with the background of the tab would take some work (unless you're using a toolkit that already supplies that.) They should either be standard tabs (though I'd avoid tabs if clicking on them shows other user interface elements with tabs), or a standard table. The table could be text-only, or text with icons if you are able to make some icons that look good. (I've never been able to do that, personally, but I'm a programmer not an artist.)

    If I were you, I'd look at the standard programming tools on your OS (probably VSCode on Windows, Xcode on macOS, and maybe Eclipse on Linux?), and play with their UI tools to see what it's like to create standard elements. Custom UI elements take a lot of work to get working and break a lot of functionality. In particular, they tend to miss the accessibility features of the OS, and they break standard things like key combinations and context menus that power-users use.

    And I'll reiterate what another user said and say to separate your business logic from your display logic. That is, make all the code where you do calculations and update information separate from the code that puts that information on screen. It's as much an art as it is a science, and it takes some learning to get right. Don't be afraid to do it wrong, though, as that's how you learn!

    Good luck and let us know how it goes!

    1 vote
    1. insegnamante
      Link Parent
      Thanks for the critique. I had someone mock up the UI and I suggested that font because I'm so tired of boring, bland UI elements for attorneys. Your explanation of what custom elements can do to...

      Thanks for the critique. I had someone mock up the UI and I suggested that font because I'm so tired of boring, bland UI elements for attorneys. Your explanation of what custom elements can do to usability will make me rethink that. I like keyboard shortcuts, and I know a lot of people that do. My paralegal, on the other hand, has not taken to them at all, so it may end up being something that is not important. I'll have to test that.

      I am a solo attorney. I've tried several software options and none of them is good for a solo attorney. I am reasonably competent with a computer and I have to take courses on how to use the software. My needs are not that complicated. I'm paying for so much that I simply don't need. Drives me nuts.