• 11 Posts
  • 58 Comments
Joined 5 months ago
cake
Cake day: February 10th, 2024

help-circle













  • desktop application for Windows, macOS, and Linux

    Nothing does cross-platform desktop apps as well as Qt.

    Definitely not Electron, which is very wasteful of system resources and has endless desktop integration bugs. Not Flutter. Not WxWidgets. Not Gtk. Not any of the various Java or Rust frameworks. Not Dear ImGui. Nothing. (Well, I haven’t tried Lazarus yet, but it requires a language that’s not on your list, so is probably not relevant here.)

    Some of the newer frameworks might shape up eventually, but it would take years of focused effort. This is an area of computing that is difficult to do well.

    I’ve been considering Ruby, Python, Golang and JavaScript

    Of those languages, I would choose Python with either PySide or PyQt. If my interface needs were very simple, I might also consider Qt Quick, which lets you build GUIs with JavaScript and a declarative language called QML.




  • Not a bad shallow introduction to the package structure, but it leaves out more than a little, and doesn’t address compiled software at all.

    Fortunately, Debian has extensive documentation. It’s worth a look for anyone wanting to build packages suitable for publishing.

    https://www.debian.org/doc/devel-manuals

    The New Maintainers’ Guide might be a good next step for understanding more use cases and available tools.

    The full Guide for Debian Maintainers is more up to date, including relatively new tools like dh that considerably simplify packaging software that uses common build systems.


  • Most of what comes to mind has already been said by others, but I want to add one thing…

    the overall code seems so convoluted to me that I don’t even know where to start to analyze a solution, even though if it’d probably take ten lines to implement.

    One of the most important things to understand about software development is that (outside of small hobby projects) the vast majority of the work is not writing code. Most of the hours will be spent on a combination of other tasks, including:

    • Understanding the desired behavior
    • Understanding what has been tried before
    • Understanding what has and hasn’t worked well in past attempts
    • Considering unexpected ways in which the software might legitimately be used
    • Imagining needs that might emerge in the future
    • Imagining problems/circumstances that might emerge in the future
    • Devising a solution that you think will work well
    • Predicting limitations of your design
    • Communicating the reasons and goals behind your design choices
    • Listening to feedback from others, and understanding it
    • Collaborating with others to find common ground
    • Conducting research to prove your assumptions or answer open questions
    • Learning the ins and outs of surrounding code that is only tangentially related to yours
    • Learning unfamiliar tools
    • Learning unfamiliar languages
    • Learning unfamiliar algorithms and data structures
    • Revising your design
    • Coming up with succinct and clear names for things
    • Testing your implementation (making sure it works now)
    • Devising and writing automated tests for your implementation (making sure it will keep working when someone else changes something)
    • Composing comments to explain why non-obvious things are done a certain way
    • Reformatting your code to fit the style of the project
    • Writing documentation, and rewriting it
    • Answering questions
    • Waiting for others to get back to you

    The time and effort required for all of this multiplies when modifying an existing codebase, and multiplies again when most of that code was written by other people. Shepherding a contribution from idea to final merge often requires not only technical skill, but also study, diplomacy, empathy, and immense patience.

    But I have no reference for how long a feature should take to implement in someone else’s code for the average Joe who does this for a living.

    It varies quite a lot. I have had dozen-line changes take months, and thousand-line changes take a day or two. Just know that if it’s taking much longer than you expected, that is completely normal. :)