• 0 Posts
  • 21 Comments
Joined 1 year ago
cake
Cake day: June 16th, 2023

help-circle


  • funbiketoExperienced DevsIs Java not good?
    link
    fedilink
    English
    arrow-up
    7
    ·
    1 year ago

    Depends on what metric you are looking and how. A warmed up JVM will run nearly as fast as Go or Rust, but many benchmarks fail to take JVM warmup into account and erroneously show Rust/Go as orders of magnitude faster, which is unfair. That said, it would be nice if warm up wasn’t required. Graalvm helps in that area, but now you have to do something special.

    However, JVM startup time is terrible. It’s gotten better and there are ways to deploy a trimmed image, but it’s still not as good as most other solutions unless you go into annoying extra steps.







  • You will lose the best candidates with an onerous coding challenge.

    Our process, which has been heavily influenced by debate on r/experiencedevs on reddit involves a short phone screen, a 30 MINUTE coding challenge, a tech interview consisting of pair programming, and a non-tech interview with management. Very light.

    The coding challenge is a FILTER only. It’s not to evaluate who to hire, but instead it’s to filter who not to continue interviewing.

    You learn a lot during pair programming in a short period of time, including personality and team fit. We let them drive and we just watch and discuss. The assignment is to fix a bug, and refactor the code the caused the bug.


  • I like that you explain the data model near the start, although I think more detail would be better.

    I believe it’s much harder to master git without understanding the simple underlying data model. Many tutorials don’t touch on it and instead jump straight into recipes for various workflows. Users can follow those recipes, but don’t really understand what the commands they are using do.


  • funbiketoProgrammingChatGPT - is using it cheating?
    link
    fedilink
    English
    arrow-up
    2
    ·
    edit-2
    1 year ago

    I wouldn’t consider the bugs chatgpt’s fault, per se. The same could happen by blindly copy/pasting from SO or a template Github project. If you are copy/pasting from anywhere, it’s even more important that you have good automated tests with good coverage, and that you take extra time to understand what you pasted.

    One of the things I do is generate high level tests first, and then the implementation code. This way I know it works, and I can spend extra time reviewing the test code first to make sure it has the correct goal(s).

    Learning is another matter. Personally, ChatGPT has greatly accelerated my learning of libraries and other languages. I’ve also used it to help me grok a block of complex code, and to automatically comment and refactor complex code into something more understandable. But it can also be used as a crutch.


  • funbiketoGitWhat's your opinion on git rebase vs git merge?
    link
    fedilink
    English
    arrow-up
    4
    ·
    edit-2
    1 year ago

    Tbh, I hate both. I wish git recognized an attempt to sync with a parent branch without resulting in either altered history (rebase) or a difficult to view log graph (merge). I also hate that teams have to choose one or the other.

    It would be nice if all git graph UIs could easily exclude parent branch merges (with a checkbox). I wrote a shell script that did that, but not everyone used it of course.

    I rebase with parent branch until I create a PR. Hopefully, I’ll get reviews quickly and won’t have to sync with the parent branch before merging the PR into the parent. However, if the PR lives longer than I’d like and conflicts occur, I’ll merge from the parent branch into the local feature branch.


  • funbiketoText EditorsNeovim or Emacs?
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    The best path depends you how much you like to tinker, your preferences, and your target platform. The learning curve is massive for either, and even after that it will take a lot of plugins and configuration to get close to feature parity of an IDE.

    You might consider an IDE plugin at first. For example, there’s a VSCode plugin that integrates actual Neovim as the editor. There’s a Jetbrains (intellij, android studio, webstorm) plugin, IDEAVim, that very closely emulates Vim.

    All that said, I use Neovim and prefer it over Emacs. The excellent Lua support in Neovim has eliminated the biggest complaint I had with Vim (vimscript vs LISP). Neovim has LSP support and can communicate with the same language backends that VSCode uses.

    No matter what you do, learning Vim keybindings can be very useful as a lot of websites and local apps support it (e.g. gmail, github, less, lazygit).



  • Yes, but it’s a very rare event. Maintaining state (form fields) makes it less of an issue. As I said, most deploys are at 4am at extremely low usage (usu zero), and even then a refresh is only needed if the backend has had breaking changes. A severe bug requires a mid-day deploy, but in my experience most severe bug fixes are only a few lines and therefore aren’t a breaking change so don’t require a refresh.

    Our way wouldn’t work well if you had 24 hours of heavy load, but most apps I’ve written have been US-only with low nightly usage (HR, K-12 admin, power grid, medical).


  • Zero downtime deployments can get very complex for heavy usage apps, such as blue-green deployment.

    We decided to avoid the complexity with some practical workarounds.

    • Most deployments happen at 4am. “develop” branch merges deploy at 4am, and “master” branch merges deploy immediately.
    • We force browser refresh if the front end detects the back end has had breaking changes. We attempt to re-populate form field values.
    • During database migrations, we send 503 with Retry-After header in response to POSTs. Our client code knows to wait for that time and try again. If the time is too long, the user gets a friendly message that it will try again in X seconds. GETs are handled by an available read-replica, if possible.


  • funbiketoExperienced DevsNegotiating a rate for contract work?
    link
    fedilink
    English
    arrow-up
    5
    ·
    edit-2
    1 year ago

    Here’s my simple formulas based on how much I would normally make: Short term hourly = Yearly Salary / 1000. Long-term (2+ months) hourly = Yearly salary / 1500.

    So, if your salary before being a contractor was $200K, then you would charge $200/hr for short term work. For a 6 month job, you would charge $133/hr


  • funbiketoExperienced DevsDelightfully Boring
    link
    fedilink
    English
    arrow-up
    1
    ·
    edit-2
    1 year ago

    This sounds like vertical slicing (incl bounded contexts), which is my preferred architecture for a monolith. It gives you the flexibility to pivot architecture more easily.

    I suggest you look into Evolutionary Architecture, with can help keep vertical slicing

    We’ve gone all-in with SSR+FaaS (aka JAMStack) with multiple projects. You get similar benefits to microservices, but without the complexity. However, hosting can be more expensive under high loads.


  • I found TDD make programming more fun because it results in less debugging. Debugging can be frustrating and depressing when you get stuck.

    I’ve found ChatGPT makes coding more fun, as I don’t get stuck as often on hard problems and it can generate boilerplate quick than I can.

    Watch videos by Primeagen on Twitch and YT. He’s very high energy. Although successful, He has also struggled with depression, drugs, and ADHD in his past, which might be helpful to you. It’s inspiring.